【发布时间】:2014-08-27 20:18:18
【问题描述】:
我正在尝试使用 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; }
}
}
【问题讨论】:
-
@AndrewWhitaker 没有其他方法可以对其进行反序列化。由于 JsonExtensionDataAttribute,我正在使用 Dictionary
。 List 或 Dictionary 将完成这项工作 -
是的,我一发表评论就意识到了,哈哈。
标签: c# json serialization json.net