繁体   English   中英

如何将带有数组的Json类型转换为.net对象?

[英]How to convert Json type with array to .net object?

我有JSON字符串:// coverage值是一个数组。

  string jsonData = @"{
""plans"":
[
{
""plan_code"":""UL500"",
    ""plan_name"":""Unlimited 500M"",
    ""days"":1,
    ""limit"":500,
    ""coverage"":
[
{
""country"":""SE"",
},
{
""country"":""BZ""
}
]
},
{
""plan_code"":""UL1GB"",
    ""plan_name"":""Unlimited 1GB"",
    ""days"":1,
    ""limit"":1024,
    ""coverage"":
[
{
""country"":""SG"",
},
{
""country"":""JP""
}
]
}
]
}
";

我被JsonConvert.DeserializeObject解析为以下示例代码:

 try
    {
        var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
        HttpResponseMessage response = await client.PostAsync("", content);
        var result = await response.Content.ReadAsStringAsync();
        var tempRecords = JsonConvert.DeserializeObject<List<plan>>(result);
    }

然后我收到一条错误消息:“无法反序列化当前JSON对象(例如{\\“ name \\”:\\“ value \\”})为类型'System.Collections.Generic.List`1 [DAL.plan] ',因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。\\ r \\ n要解决此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,以便它是可以从JSON对象反序列化的普通.NET类型(例如,不是整数之类的原始类型,不是数组或List之类的集合类型),也可以将JsonObjectAttribute添加到该类型中以强制使用从JSON对象反序列化。\\ r \\ n路径'plans',第1行,位置9。”

请告诉我解决此问题的正确方法。

这是我的控制台应用程序中具有相同JSON的工作代码:

public class Program
{
    static void Main(string[] args)
    {
        string jsonData = "{\"plans\":[{\"plan_code\":\"UL500\",\"plan_name\":\"Unlimited 500M\",\"days\":1,\"limit\":500,\"coverage\":[{\"country\":\"SE\"},{\"country\":\"BZ\"}]},{\"plan_code\":\"UL1GB\",\"plan_name\":\"Unlimited 1GB\",\"days\":1,\"limit\":1024,\"coverage\":[{\"country\":\"SG\"},{\"country\":\"JP\"}]}]}";

        var tempRecords = JsonConvert.DeserializeObject<RootObject>(jsonData);

    }
}

public class RootObject
{
    public List<plan> plans { get; set; }
}

public class plan
{
    public string plan_code { get; set; }
    public string plan_name { get; set; }
    public int days { get; set; }
    public int limit { get; set; }
    public IList<Country> coverage { get; set; }
}

public class Country
{
    public string country { get; set; }
}

我创建了适合您的JSON结构的C#类。 注意,我修改了您提供的JSON,因为它的格式似乎不正确。

整个字符串代表一个对象,该对象具有一个称为“ plans”的属性,该属性引用了您的数组。 字符串本身不是数组,因此,如果您尝试将其反序列化为List<T> ,那将无法正常工作。 您需要处理以下事实:所需的数组由JSON对象包装。

我认为这是一个类似的问题,可以很好地解释它

您好,我刚刚看了您的问题,发现您提供的是json字符串,而不是标准格式的json字符串。 在这里,我给了我一个不错的json字符串,您可以尝试一下。

{
    "plans": [`enter code here`
        {
            "plan_code": "UL500",
            "plan_name": "Unlimited500M",
            "days": 1,
            "limit": 500,
            "coverage": [
                {
                    "country": "SE"
                },
                {
                    "country": "BZ"
                }
            ]
        },
        {
            "plan_code": "UL1GB",
            "plan_name": "Unlimited1GB",
            "days": 1,
            "limit": 1024,
            "coverage": [
                {
                    "country": "SG"
                },
                {
                    "country": "JP"
                }
            ]
        }
    ]
}

与JSON格式对应的实体不匹配。 您的格式是一个对象,并且该对象具有属性数组,而不是List

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM