JSON。引用反序列化为null

时间:2017-07-10 10:10:24

标签: json ref

我正在使用Newtonsoft.json。我无法理解反序列化的结果。 Bulletin.PageList正在填写好。但引用PageList元素的Question的Page始终为null。在JsonSerializerSettings中我指定了PreserveReferencesHandling.All但它没有帮助。你能帮忙解决Page的null问题吗?谢谢

JSON structure:

"Bulletins": [
        {
            "$id": "46b5efa80fe644d7bd525e2c30f5df8a",
            "$type": "Bulletin",
            "JSONNETTYPE": "Bulletin",
            "PagesList": [
                {
                    "id": "4ed13d727cd144d1acf1e0c9bc273245",
                    "JSONNETTYPE": "PageView",
                    "Number": 1,
                    "Id": "1a2b8ed4249948e194b396c46a5d1eeb",
                    "UiId": "4ed13d727cd144d1acf1e0c9bc273245"
                }
            ],
            "AgendaQuestions": [
                {
                    "$id": "eceb6fe6c74a40d59f0673b76bd6dbb3",
                    "$type": "QSimple",
                    "Page": {
                        "$ref": "46b5efa80fe644d7bd525e2c30f5df8a#PagesList.0"
                    }
                }
             ]
}]

C#结构:

public class Bulletin
    {        
        public Bulletin()
        {                        
        }

        public string Dbid { get; set; }

        public List<PageView> PagesList;

        public List<Question> AgendaQuestions;
  }

public abstract class Question
    {
        protected Question(int number, string customNumberLabel = null)
        {
            Number = number;
            CustomNumberLabel = customNumberLabel;
        }

        public int Number { get; set; }

        public string CustomNumberLabel { get; set; }

        public PageView Page { get; set; }    
}

public class PageView
    {
        public int Number { get; set; }    
        public string Id { get; set; }    
        public int BulletinNumber { get; set; }    
        public PageView()
        {                
        }       
    }
var settings = new JsonSerializerSettings
{ PreserveReferencesHandling = PreserveReferencesHandling.All

}

1 个答案:

答案 0 :(得分:0)

我使用的是dojox.json.ref库。如果我为Page设置__id,则对PagesList元素的引用将变为直接,而不是复杂(如46b5efa80fe644d7bd525e2c30f5df8a#PagesList.0),并且页面已填充。