加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

不可否认,我的问题的原因可能并不是每个人都一样,但这至少是一个警示故事,要仔细检查在反序列化过程中初始化对象时发生的情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读