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

C# 如何将带有数组的Json类型转换为.net对象?,c#,arrays,json,deserialization,C#,Arrays,Json,Deserialization,我有一个JSON字符串: //覆盖率值是一个数组 string jsonData = @"{ ""plans"": [ { ""plan_code"":""UL500"", ""plan_name"":""Unlimited 500M"", ""days"":1, ""limit"":500, ""coverage"": [ { ""country"":""SE"", }, { ""country"":""BZ"" } ] }, { ""plan_code""

我有一个JSON字符串: //覆盖率值是一个数组

  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);
    }
试试看
{
var content=newstringcontent(jsonData,Encoding.UTF8,“application/json”);
HttpResponseMessage response=wait client.PostAsync(“,content”);
var result=await response.Content.ReadAsStringAsync();
var tempRecords=JsonConvert.DeserializeObject(结果);
}
然后我会收到一条错误消息: “无法将当前JSON对象(例如,{“name\”:\“value\”})反序列化为'System.Collections.Generic.List`1[DAL.plan]”类型,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。\r\n若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或将反序列化类型更改为正常的.NET类型。”(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型),可以从JSON对象反序列化。还可以将JsonObjectAttribute添加到该类型,以强制其从JSON对象反序列化。\r\n路径“plans”,第1行,位置9。“


请为我指明解决此问题的正确方法。

整个字符串表示一个具有名为“plans”属性的对象这是指您的数组。字符串本身不是数组,因此,如果您试图将其反序列化为
列表
,这是行不通的。您需要处理这样一个事实,即所需数组由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格式对应的实体不匹配。您的格式是一个对象,该对象有一个属性数组,而不是列表。以下是使用相同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; }
}
公共类程序
{
静态void Main(字符串[]参数)
{
“计划”名称:“:“无限500米”,以及“计划”名称名称:“:“无限500米\”,,“天”:1,”1,“限制”1,“极限”:1,”天:1,“限制”限:1:1:1,“限制”限:500,“覆盖范围”1,”1,“限制”1,”限:1:1:1:1,”1,“限制”:1,”限制:1:1:1:00,目前:00,00,”00,除除:::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}”;
var tempRecords=JsonConvert.DeserializeObject(jsonData);
}
}
公共类根对象
{
公共列表计划{get;set;}
}
公共班级计划
{
公共字符串计划\ U代码{get;set;}
公共字符串计划名称{get;set;}
公共整数天{get;set;}
公共整数限制{get;set;}
公共IList覆盖{get;set;}
}
公营国家
{
公共字符串国家{get;set;}
}
我创建了适合您的JSON结构的C#类。
请注意,我已经修改了您提供的JSON,因为它的格式似乎不正确。

看起来像是重复的,非常感谢!字符串jsonData在我的例子中实际上是动态数据,您给我的示例代码是动态数据well@MaiTrọ如果这有助于解决您的问题,请标记为答案。谢谢您的指导!