C#和JSON非常新。我一直在努力解决这个问题大约一天,但无法理解。
JSONLint表示两个JSON字符串都有效。
尝试反序列化以下
{"items":[{"id":"1122267","quantity":"1","bundle":"1"}],"seconds_ago":"1"}
抛出异常
发生了类型为“System.OutOfMemoryException”的未处理异常 在Newtonsoft.Json.dll
如果我尝试
{"items":[{"id":"1122267","quantity":"1","bundle":"1"}]}
它有效。
我正在从文本框中读取JSON字符串,然后使用以下
进行反序列化string json = textBox1.Text;
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(json);
答案 0 :(得分:3)
我对DataSet并不熟悉,但在玩了一下之后,我想我找到了原因。根据文件:
DataSet包含一个集合的DataTable对象
由于DataSet是对象的集合,因此您可以仅将集合(数组)反序列化到其中。所以,
{"items":[{"id":"1122267","quantity":"1","bundle":"1"}],"seconds_ago":"1"}
不起作用,因为它包含一个集合(items
)和一个属性(seconds_ago
)。另一方面,
{"items":[{"id":"1122267","quantity":"1","bundle":"1"}]}
有效,因为它只包含一个集合。
因此,如果你真的想将你的json字符串反序列化为DataSet,你应该这样做:
{
"objects": [
{
"items":[{"id":"1122267","quantity":"1","bundle":"1"}],
"seconds_ago":"1"
}
]
}
你应该考虑deserializing into a C# object,我认为这样做不那么复杂,也不容易处理:
public class RootObject
{
public List<Item> items { get; set; }
public string seconds_ago { get; set; }
}
public class Item
{
public string id { get; set; }
public string quantity { get; set; }
public string bundle { get; set; }
}
RootObject deserializedObject = JsonConvert.DeserializeObject<RootObject>(json);
答案 1 :(得分:-1)
DataSet
类没有属性seconds_ago
或items
。所以
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(json);
永远不会有效,因为您无法将特定的json字符串转换为DataSet