Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JSON.Net、JsonConvert.DeserializeObject-反序列化问题_C#_Json_Json.net_Deserialization - Fatal编程技术网

C# JSON.Net、JsonConvert.DeserializeObject-反序列化问题

C# JSON.Net、JsonConvert.DeserializeObject-反序列化问题,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,当我试图用JSON.Net反序列化JSON时,它为JSON数组提供了无效值 我有简单的JSON: [ { "PhaseName": "Start", "Advices": ["Lorem ipsum dolor", "Lorem ipsum dolor", "Lorem ipsum dolor"] }, { "PhaseName": "In Progress", "Advices": ["Lorem ipsum dolor", "Lorem

当我试图用JSON.Net反序列化JSON时,它为JSON数组提供了无效值

我有简单的JSON:

[
{
    "PhaseName": "Start",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
},
{
    "PhaseName": "In Progress",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
},
{
    "PhaseName": "Finish",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
}
]

我的代码中有一个对应类:

public class Advices
{
    public string PhaseName { get; set; }
    public List<string> AdvicesList { get; set; }
}
因此,当我尝试像这样反序列化JSON时:

MyAdvicesArrays= JsonConvert.DeserializeObject<Advices[]>(sMyJSON));
MyAdvicesArray=JsonConvert.DeserializeObject(sMyJSON));

JSON.Net使用正确的值填充MyAdvicesArray数组中每个对象的“阶段名称”属性,但每个对象的Advices数组无效:“无法计算表达式”,如果您在运行时检查它们。我不明白。我做错了什么?

根据实体,您的
json
无效

在您的类型中,将
AdvicesList
更改为
Advices

public List<string> AdvicesList { get; set; }
public List AdvicesList{get;set;}
换成

public List<string> Advices { get; set; }
公共列表建议{get;set;}

不,您的JSON和您的类一样不正确

首先将JSON更改为:

{
    phases:[
        {
            "PhaseName": "Start",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        },
        {
            "PhaseName": "In Progress",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        },
        {
            "PhaseName": "Finish",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        }
    ]
}
请注意,在您没有正确声明JSON对象之前。此外,还需要数组的属性

现在需要两个类:

public class AnythinYouWant{
    public List<Phase> Phases{get;set;}
}

public class Phase{
    public string PhaseName{get;set;}
    public List<string> Advices{get;set;}
}
任何你想要的公共类{
公共列表阶段{get;set;}
}
公共课阶段{
公共字符串PhaseName{get;set;}
公共列表建议{get;set;}
}

注意第一个类是如何用于顶级JSON对象的。名称可以是您想要的任何名称。但是任何属性都需要与名称匹配。

我所做的一切就是更改
advictions
类的定义:

public class Advice
{
    public string PhaseName { get; set; }
    public List<string> Advices { get; set; }
}
公共类建议
{
公共字符串PhaseName{get;set;}
公共列表建议{get;set;}
}

我将类名更改为just
Advice
并将
AdvicesList
属性更改为
Advices

我不明白,除了类名和属性名之外,您更改了什么?类的定义还是一样的。谢谢,听起来很合乎逻辑。那么,这是否意味着我不能像我的示例中那样在JSON中拥有未命名的对象数组?[{“example”:1,“example2”:“TestName”},{“example3”:1,“example4”:“TestName”}]不,您不能这样做,因为您的json对象必须始终以{}开头,您不能用[]声明它。在初始{}之后,必须有一个属性来分配第一个数组。在我的示例中,“Advices”应该是一个具有string属性和array属性的对象,它怎么可能是List呢?
public class Advice
{
    public string PhaseName { get; set; }
    public List<string> Advices { get; set; }
}