微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Json.NET JsonConvert.DeserializeObject()返回null值

我试图反序列化这个字符串:

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] 举报,一经查实,本站将立刻删除。

相关推荐