gpt4 book ai didi

c# - 使用 Json.Net 反序列化 Json 对象

转载 作者:行者123 更新时间:2023-11-30 16:10:35 25 4
gpt4 key购买 nike

我正在尝试使用 Json.net 反序列化一个对象。我能够成功地做到这一点,但它更像是一个 hack,所以我正在寻找一种更好/正确的方法来做到这一点。

{
"page":"admin",
"context":"id",
"records":{
"rCount":6,
"1":[
{
"name":"Romeo",
"dob":"01\/01\/1970"
},
{
"name":"Harry",
"dob":"10\/10\/2012"
},
{
"name":"Lee",
"dob":"17\/10\/2012"
}],
"2":[
{
"name":"Mark",
"dob":"01\/01\/1970"
},
{
"name":"Jack",
"dob":"10\/10\/2012"
},
{
"name":"Json",
"dob":"17\/10\/2012"
}],

}}

这是 records 对象的问题所在的 json 字符串。如果它没有 rCount 变量,那么它可以反序列化为字典,但由于 rCount 变量,它不能作为字典正确反序列化。反序列化此对象的正确方法应该是什么。

这是我的解决方案:

class Program
{
static void Main(string[] args)
{
var recordFile = JsonConvert.DeserializeObject<RecordFile>(Properties.Resources.data);
}

public class RecordFile
{
public string Page { get; set; }
public string Context { get; set; }
public Records Records { get; set; }
}

public class Records
{
public int RCount { get; set; }
[JsonExtensionData]
private Dictionary<string, object> _reocordList;

public List<Record[]> RecordList
{
get
{
if (_reocordList != null && _reocordList.Count > 0)
{
return _reocordList.Values.Select(record => JsonConvert.DeserializeObject<Record[]>(record.ToString())).ToList();
}
return new List<Record[]>();
}
}

}

public class Record
{
public string Name { get; set; }
public string Dob { get; set; }
}
}

最佳答案

可以使用jObject手动解析JSON:

public class RecordFile
{
public string Page { get; set; }
public string Context { get; set; }
public Records Records { get; set; }
}

public class Records
{
public int RCount { get; set; }
public IDictionary<string, List<Record>> RecordsDictionary { get; set; }
}


public class Record
{
public string Name { get; set; }
public string Dob { get; set; }
}

然后:

var jObject = JObject.Parse(\* your json *\);
var recordFile = new RecordFile
{
Page = jObject.Value<string>("page"),
Context = jObject.Value<string>("context"),
Records = new Records
{
RCount = jObject["records"].Value<int>("rCount"),
RecordsDictionary =
jObject["records"].Children<JProperty>()
.Where(prop => prop.Name != "rCount")
.ToDictionary(prop => prop.Name),
prop =>
prop.Value.ToObject<List<Record>>())
}

};

当然,当属性不存在时,它可以很容易地处理。

关于c# - 使用 Json.Net 反序列化 Json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25536223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com