【问题标题】:Error while deserializing json string into collection [duplicate]将json字符串反序列化为集合时出错[重复]
【发布时间】: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 的最佳选择是什么?字符串也可以有一个对象。

【问题讨论】:

标签: javascript asp.net json json.net


【解决方案1】:

根据詹姆斯的回答(我相信你已经知道了,但就是这样)。这也应该只适用于 1 个对象:

string json = <your string here>;
json = "[" + json;
json = json.Replace("}{", "},{");
json += "]";

不确定 json.net 中是否有内置方法可以做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 2011-12-29
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多