【发布时间】:2017-10-19 16:46:12
【问题描述】:
我有如下的json字符串
"{\"Key\":3296,\"Value1\":\"Test1\",\"Value2\":\"City\",\"Value3\":\"TX\",\"Value4\":null,\"Value5\":null,\"Value6\":null}{\"Key\":3297,\"Value1\":\"Test2\",\"Value2\":\"PUD\",\"Value3\":\"TX\",\"Value4\":null,\"Value5\":null,\"Value6\":null}"
以及对应的C#类
public class MyObject
{
public int Key { get; set; }
public string Value1 { get; set; }
public string Value2 { get; set; }
public string Value3 { get; set; }
public string Value4 { get; set; }
public string Value5 { get; set; }
public string Value6 { get; set; }
}
当我尝试使用 Newtonsoft 反序列化此字符串时出现错误
{"无法反序列化当前的 JSON 对象(例如 {\"name\":\"value\"}) 输入类型 'System.Collections.Generic.IEnumerable`1[MyObject]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。\r\n要修复此错误,请将 JSON 更改为 JSON 数组 (例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,也不是集合 可以从 JSON 反序列化的数组或列表等类型 目的。 JsonObjectAttribute 也可以添加到类型中来强制它 从 JSON 对象反序列化。\r\nPath 'Key',第 1 行,位置 7."}
我知道字符串的格式不适合 json 数组。这就是我获取字符串的方式,我无法控制它。
将字符串转换为 MyObject 的 IEnumerable 的最佳选择是什么?字符串也可以有一个对象。
【问题讨论】:
-
您的 JSON 字符串无效,因为它由两个彼此相邻的单独对象组成,例如
{object1}{object2}。您应该将它们放入一个数组中,使其变为[{object1}, {object2}] -
正如我所说,我理解它的格式不正确。但这就是我收到它的方式
-
好吧,如果字符串始终是一个简单对象的列表(没有嵌套),您可能可以将所有
}<whitespace?>{实例替换为},{,将其括在方括号中,您就有了一个有效的您可以使用 Newtonsoft 反序列化的 JSON 字符串。如果字符串在引号或嵌套中包含任何大括号,那么您的任务会更加艰巨,我建议让向您发送字符串 将其修复为有效 JSON 的人(IMO 应该成为您的第一种方法)。
标签: javascript asp.net json json.net