如何正确反序列化 Json 字符串
How to correctly deserialize a Json string
我在将 Json 字符串解析为 C# JObject 时遇到问题。最终结果与起始字符串不一致
var original = "{\"System.String\":[\"AAEAAAD/////AQAAAAAAAAAGAQAAAA53d3cuZ29vZ2xlLmNvbQs=\", \"mscorlib\"],\"System.Boolean\":[\"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=\", \"mscorlib\"],\"System.Boolean\":[\"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=\", \"mscorlib\"]}";
var parsed = JObject.Parse(original);
这有效,但我解析的对象实际上是这样的:
{{
"System.String": [
"AAEAAAD/////AQAAAAAAAAAGAQAAAA53d3cuZ29vZ2xlLmNvbQs=",
"mscorlib"
],
"System.Boolean": [
"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=",
"mscorlib"
]
}}
如您所见,它删除了其中一个对象,为什么?
我也尝试过使用合适的转换器
var parsed2 = JsonConvert.DeserializeObject<JObject>(original);
我可以通过重载设置来解决这个问题吗?
JSON 不能包含 2 个具有相同键的项目。
System.Boolean
在您的 JSON 中出现了两次。
为了举例说明为什么这是一个问题,请想一想您对 parsed["System.Boolean"]
到 return 的期望?
如果您正在解析的 JSON 是由您的系统创建的,您可以对其进行修改,使其包含一个对象数组,而不是直接包含在其中的 key/value 对。
示例:
{
"items" : [
{
"System.String": [
"AAEAAAD/////AQAAAAAAAAAGAQAAAA53d3cuZ29vZ2xlLmNvbQs=",
"mscorlib"]
},
{
"System.Boolean": [
"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=",
"mscorlib"]
}
]
}
我在将 Json 字符串解析为 C# JObject 时遇到问题。最终结果与起始字符串不一致
var original = "{\"System.String\":[\"AAEAAAD/////AQAAAAAAAAAGAQAAAA53d3cuZ29vZ2xlLmNvbQs=\", \"mscorlib\"],\"System.Boolean\":[\"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=\", \"mscorlib\"],\"System.Boolean\":[\"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=\", \"mscorlib\"]}";
var parsed = JObject.Parse(original);
这有效,但我解析的对象实际上是这样的:
{{
"System.String": [
"AAEAAAD/////AQAAAAAAAAAGAQAAAA53d3cuZ29vZ2xlLmNvbQs=",
"mscorlib"
],
"System.Boolean": [
"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=",
"mscorlib"
]
}}
如您所见,它删除了其中一个对象,为什么?
我也尝试过使用合适的转换器
var parsed2 = JsonConvert.DeserializeObject<JObject>(original);
我可以通过重载设置来解决这个问题吗?
JSON 不能包含 2 个具有相同键的项目。
System.Boolean
在您的 JSON 中出现了两次。
为了举例说明为什么这是一个问题,请想一想您对 parsed["System.Boolean"]
到 return 的期望?
如果您正在解析的 JSON 是由您的系统创建的,您可以对其进行修改,使其包含一个对象数组,而不是直接包含在其中的 key/value 对。
示例:
{
"items" : [
{
"System.String": [
"AAEAAAD/////AQAAAAAAAAAGAQAAAA53d3cuZ29vZ2xlLmNvbQs=",
"mscorlib"]
},
{
"System.Boolean": [
"AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uQm9vbGVhbgEAAAAHbV92YWx1ZQABAAs=",
"mscorlib"]
}
]
}