c# – Json.NET JsonConvert.DeserializeObject()返回null值
发布时间:2020-12-15 20:50:30 所属栏目:百科 来源:网络整理
导读:我试图反序列化这个字符串: string _jsonObject = {"Ad":{"Type":"Request","IdAd":"xxx@xxx.com","Category":"cat","SubCategory":"subcat"},"Position":{"Latitude":"38.255","Longitude":"1.2","Imei":"0123456789"};}"
我试图反序列化这个字符串:
string _jsonObject = {"Ad":{"Type":"Request","IdAd":"xxx@xxx.com","Category":"cat","SubCategory":"subcat"},"Position":{"Latitude":"38.255","Longitude":"1.2","Imei":"0123456789"}; }"; Message _message = JsonConvert.DeserializeObject<Message>(_jsonObject); 适用于“广告”而非实际的“位置”. 解决方法
为了帮助可能遇到此问题的其他人或与之相关的人…
在我的例子中,我有一个带有其他对象数组的对象,并且在反序列化后,这些子对象上的一个引用类型属性始终为null.我尝试了各种各样的东西,包括下载JSON.Net源代码并逐步完成它以找到失败点. 长话短说,问题当然是我自己的问题.这是我的JSON和类的高度简化版本. JSON { "$id": "1","RowCount": 10,"Rows": [{ "$id": 2","ItemId": "1","ItemName": "Some Item","Owner": { "Name": "John Doe","Id": "711D04F5-586F-4FD4-8369-4C00B51DD86F",// other properties... },"OwnerId": "711D04F5-586F-4FD4-8369-4C00B51DD86F" },// more rows ] } 类 public class Items { public int RowCount { get; set; } public IEnumerable<Item> Rows { get; set; } } public class Item { private string ownerId; public string ItemId { get; set; } public string ItemName { get; set; } public Person Owner { get; set; } public string OwnerId { get { return this.ownerId; } set { if (value != this.ownerId) { this.Owner = null; } this.ownerId = value; } } } public class Person { public string Name { get; set; } public string Id { get; set; } // other properties } 发生的事情是,因为Owner属性出现在OwnerId属性之前的JSON中,所以当设置了OwnerId属性时,setter代码确定当前值与设置的值不同(因为当前值是null),因此它将Owner属性设置为null. 为了解决这个问题,我还检查了针对Owner对象的id设置的值,如果它们相同,则跳过将Owner设置为null. 不可否认,我的问题的原因可能并不是每个人都一样,但这至少是一个警示故事,要仔细检查在反序列化过程中初始化对象时发生的情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |