我正在尝试使用JSON.net将JSON加载到SQL数据库中。
我对其他JSON响应没有任何问题,但以下格式似乎没有正确反序列化。
{"Report":["2012m01d01","2012m01d02","2012w01","2012m01","2012m01d03","2012m01d04","2012m01d05","2012m01d06","2012m01d07","2012m01d08"],
"Realtime":null}
有人可以提供一些有关为什么会这样做的见解吗?我正在使用以下代码进行反序列化。
public void Deserialize(String jsonText, ref DataTable dt)
{
JsonSerializer json = new JsonSerializer();
json.NullValueHandling = NullValueHandling.Ignore;
json.ObjectCreationHandling = ObjectCreationHandling.Replace;
json.MissingMemberHandling = MissingMemberHandling.Ignore;
json.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
StringReader sr = new StringReader(jsonText);
JsonTextReader reader = new JsonTextReader(sr);
dt = (DataTable)json.Deserialize(reader, typeof(DataTable));
reader.Close();
}
有关解决此问题的最佳方法的任何想法是什么?这适用于其他JSON响应!
提前致谢
答案 0 :(得分:0)
JSON能够保存hirarchial信息,这些信息不会转换为单个数据表,而是使用数据集和表关系转换为多个数据表。
我把你的json放在http://jsonlint.com验证器和格式化程序
中你说这个反序列化没有问题
{
"accountID": 1,
"profileID": null,
"name": "Pages",
"ID": "18d039ae0360",
"language": null,
"type": null,
"Category": null,
"IsHierarchy": false,
"IntervalsEnabled": true,
"IsRealtimeCompatible": true,
"properties": null
}
这是一个单一的对象
但这不会正确反序列化。
{
"Report": [
"2012m01d01",
"2012m01d02",
"2012w01",
"2012m01",
"2012m01d03",
"2012m01d04",
"2012m01d05",
"2012m01d06",
"2012m01d07",
"2012m01d08"
],
"Realtime": null
}
实际上你的问题是数据处理而非序列化
第一个是单个对象,可以反序列化为DataTable 另一个是保存对报表对象列表的引用的对象。
因此,您需要手动将对象的转换器写入两个dataTables
此代码有效,我相信您可以为两个表创建转换函数
var settings = new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Error,
NullValueHandling = NullValueHandling.Include
};
JsonSerializer json = JsonSerializer.Create(settings);
json.Error += (x, y) =>
{
var s = y.ErrorContext;
var t = y.CurrentObject;
};
StringReader sr = new StringReader(jsonString);
JsonTextReader reader = new JsonTextReader(sr);
var o = json.Deserialize<ClsReport>(reader);
string sf = o.ReportItems[2];
希望这有帮助