我试图反序列化这个字符串:
string _jsonObject = {\"Ad\":{\"Type\":\"Request"\,\"IdAd\":\"[email protected]\",\"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.
不可否认,我的问题的原因可能并不是每个人都一样,但这至少是一个警示故事,要仔细检查在反序列化过程中初始化对象时发生的情况.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。