当使用 System.Web.Helpers 中的 Json 类并运行以下代码时,我希望它生成一个包含与原始字符串相同信息的 json 字符串,但奇怪的是它只返回字符串{ "employees" : {} }
并完全省略数组并替换它有一个空的对象?
string jsonData = "{ \"employees\": [ { \"firstName\":\"John\" , \"lastName\":\"Doe\" }, { \"firstName\":\"Anna\" , \"lastName\":\"Smith\" }, { \"firstName\":\"Peter\" , \"lastName\":\"Jones\" } ] }";
var json = Json.Decode(jsonData);
string result = Json.Encode(json);
// result is: { "employees" : {} }
当我查看从 Json.Decode 返回的对象时,数组被解码为 DynamicJsonArray。如果我使用数组/列表/字典创建一个 .NET 对象,它似乎可以完美地对它们进行编码,因此问题似乎与 DynamicJsonArray 有关。
如果我对没有数组的复杂 json 字符串进行编码/解码,它似乎工作正常:
string jsonData = "{ \"firstName\": \"John\", \"lastName\": \"Doe\", \"family\": { \"mother\": { \"firstName\": \"Anna\", \"lastName\": \"Smith\" }, \"father\": { \"firstName\": \"Peter\", \"lastName\": \"Jones\" } } }";
var json = Json.Decode(jsonData);
string result = Json.Encode(json);
/* result is (formatted for readability):
{
"firstName" : "John",
"lastName" : "Doe",
"family" : {
"mother" : {
"firstName" : "Anna",
"lastName":"Smith"
},
"father" : {
"firstName" : "Peter",
"lastName" : "Jones"
}
}
}
*/
我查看了 msdn 上的文档,但找不到任何不应该工作的原因。这可能是一个错误还是设计使然?
更新
如果我在根节点有一个 json 字符串,它是一个数组,它会正确编码/解码,所以我真的开始怀疑这是一个错误(或者至少它非常不一致):
string jsonData = "[ { \"firstName\":\"John\" , \"lastName\":\"Doe\" }, { \"firstName\":\"Anna\" , \"lastName\":\"Smith\" }, { \"firstName\":\"Peter\" , \"lastName\":\"Jones\" } ]";
var json = Json.Decode(jsonData);
string result = Json.Encode(json);
/* result is (formatted for readability):
[
{
"firstName" : "John",
"lastName" : "Doe"
},
{
"firstName" : "Anna",
"lastName" : "Smith"
},
{
"firstName" : "Peter",
"lastName" : "Jones"
}
]
*/
更新 2
毕竟我决定向微软提出一个问题。让我们看看他们要说什么: http ://connect.microsoft.com/VisualStudio/feedback/details/779119/data-from-json-decode-is-not-encoded-correctly-when-encoding-with-json-编码