背景
所以我决定开始在某些C#程序中使用JSON而不是XML.当然,我发现的第一件事是Newtonsoft的JSON.NET.这似乎是在.NET世界中用于某些JSON解析的合理的事情,并且每个人都通过Microsoft提供的内置序列化程序建议它.这就是我决定使用的.到目前为止,我还没有能够反序列化任何东西,除了非常简单的例子,例如...... 这一个.
我试图将以下JSON反序列化为一个有意义的对象,我可以将其用于我的程序,但是每次我尝试这样做时应用程序都会崩溃.我对异常消息中发生的事情进行了非常含糊的解释.我没有得到一个行号或任何东西,只是说......
附加信息:无法将当前JSON数组(例如[1,2,3])反序列化为类型"JsonTest.testObjects",因为该类型需要JSON对象(例如{"name":"value"})才能正确反序列化.
要修复此错误,请将JSON更改为JSON对象(例如{"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),例如List从JSON数组反序列化.JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化.
也许它说我的第一个物体有问题?在进入子类之前,我没有在这里使用任何数组,不确定这里发生了什么.
{
"name":"myTest",
"testObjects":[
"testObject":
"name":"Operator Tests",
"index":1,
"description":"Test out the operator interface.",
"SubTests":[
"SubTest":
"name":"Display Test",
"index":4,
"description":"Testing for display faults.",
"Steps":[
"Step":
"name":"Configuration #1",
"Parameters":[
"Mode-A",
"Unit #1"
],
"Step":
"name":"Configuration #2",
"Parameters":[
"Mode-B",
"Unit #1"
],
"Step":
"name":"Configuration #3",
"Parameters":[
"Mode-C",
"Unit #1"
]
]
]
]
}
Run Code Online (Sandbox Code Playgroud)
好的,然后这里是反序列化代码.
Test newTest = null;
String testData = String.Empty;
// read the file
testData = File.ReadAllText("Test.json");
// de-serialize the JSON
newTest = JsonConvert.DeserializeObject<Test>(testData);
Run Code Online (Sandbox Code Playgroud)
然后,Test这是被反序列化的类.该Test物体是一个容纳所有的对象testObjects.在明确要求之前,我最初不会提供有关子类的信息,因为我相信问题可能在我的JSON开始的某个地方.我会提供尽可能多的细节,只要问我!
题
为什么这不会序列化,这个异常/消息实际告诉我什么?
不合法的JSON:使用http://jsonlint.com/
{
"name": "myTest",
"testObjects": [
"testObject":
"name": "Operator Tests",
"index": 1,
Run Code Online (Sandbox Code Playgroud)
testObjects是一个数组,但您在其中指定了键值对.因此内容应该是对象或对象列表.
我想你想要这样的东西:
{
"name":"myTest",
"testObjects":[
{
"name":"Operator Tests",
"index":1,
"description":"Test out the operator interface.",
"SubTests":[
{
"name":"Display Test",
"index":4,
"description":"Testing for display faults.",
"Steps":[
{
"name":"Configuration #1",
"Parameters":[
"Mode-A",
"Unit #1"
]
},
{
"name":"Configuration #2",
"Parameters":[
"Mode-B",
"Unit #1"
]
},
{
"name":"Configuration #3",
"Parameters":[
"Mode-C",
"Unit #1"
]
}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |