我正在尝试将Json转换为DataTable。我在将jsonArray转换为DataTable时获得了成功。但是,当转换json字符串时(如下):
var r = {'ASSOCIATION_ID':61.0,'DESCRIPTION':'fssESTf64 - false','ACTIVE':true,'MODEL_TYPE':'0','SEARCH_TYPE':'false','CREATED_BY':'1090323','CREATED_DATE':'2015-09-17T14:41:20','LAST_UPDATED_BY':'1090323','LAST_UPDATED_DATE':'2016-02-26T15:55:54'}
我得到一个错误为{"读取DataTable时意外的JSON令牌。预期的StartArray,得到的StartObject.Path",第1行,位置1。"}
我的代码很简单:
DataTable a = JsonConvert.DeserializeObject<DataTable>(r);
请协助。
根JSON容器是一个对象(逗号分隔的键/值对的无序集合,由大括号-{
和}
包围)。Json.NET将DataTable
序列化为对象的数组(由方括号[
和]
包围的逗号分隔标记的有序集合),每行有一个数组条目,如序列化数据集中所示。即,以下内容可以反序列化为数据表:
[
{
"ASSOCIATION_ID": 61.0,
"DESCRIPTION": "fssESTf64 - false",
"ACTIVE": true,
"MODEL_TYPE": "0",
"SEARCH_TYPE": "false",
"CREATED_BY": "1090323",
"CREATED_DATE": "2015-09-17T14:41:20",
"LAST_UPDATED_BY": "1090323",
"LAST_UPDATED_DATE": "2016-02-26T15:55:54"
}
]
因此,您的JSON无法通过JSON.NET.自动映射到DataTable
如果需要,可以将JSON对象反序列化为一行DataTable
。要做到这一点,请将它加载到一个中间JToken
中,检查它是否是一个对象而不是数组,如果是,请将其封装在一个数组中,然后反序列化:
var token = JToken.Parse(r);
if (token.Type == JTokenType.Object)
token = new JArray(token);
var a = token.ToObject<DataTable>();