Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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
Json字符串的c#等效类_C#_Asp.net_Json_Asp.net Mvc - Fatal编程技术网

Json字符串的c#等效类

Json字符串的c#等效类,c#,asp.net,json,asp.net-mvc,C#,Asp.net,Json,Asp.net Mvc,我有Json字符串,这是我在jquery中创建的。现在我必须在服务器端发布它。我无法在c#中创建它的等效类 这是我的json字符串 [ { "Option": "Sub Option 0", "Value": "Question 0", "questions": [ { "Option": "Sub Option 1", "Value": "Sub Qu

我有Json字符串,这是我在jquery中创建的。现在我必须在服务器端发布它。我无法在c#中创建它的等效类

这是我的json字符串

[
    {
        "Option": "Sub Option 0",
        "Value": "Question 0",
        "questions": [
            {
                "Option": "Sub Option 1",
                "Value": "Sub Question for 0",
                "questions": [
                    {
                        "Option": "Sub Option 2",
                        "Value": "Sub Question for 1"
                    },
                    {
                        "Option": "Sub Option 5",
                        "Value": "Sub Question for 1",
                        "questions": [
                            {
                                "Option": "Sub Option 6",
                                "Value": "Sub Question for 5",
                                "questions": [
                                    {
                                        "Option": "Sub Option 7",
                                        "Value": "Sub Question for 6"
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "Option": "Sub Option 3",
                "Value": "Sub Question for 0"
            },
            {
                "Option": "Sub Option 4",
                "Value": "Sub Question for 0"
            }
        ]
    }
]
我试过这样做

public class AnyName
{
    public string Option { get; set; }
    public string Value { get; set; }
    public List<AnyName> questions { get; set; }
}
Js:


我在服务器端得到空值
allQuestions为null

修复questions属性的大小写,因为它在JSON字符串中的大小写较低。根据所使用的JSON序列化程序,您还可以尝试使用特定于序列化程序的属性对其进行映射,但将类属性与JSON中的预期属性名称相匹配则更为简单

public class Question
{
    public string Option { get; set; }
    public string Value { get; set; }
    public List<Question> questions { get; set; }
}
公开课问题
{
公共字符串选项{get;set;}
公共字符串值{get;set;}
公共列表问题{get;set;}
}
列表将生成问题类的JSON数组,并将从包含适合问题类的结构的JSON数组中正确反序列化

由于JSON结构有一个问题JSON数组的根,您还需要进行以下更改以接受该数组:

[HttpPost]
public void GetQuestion(List<Question> questions)
{
   //read all the question here.
   var x = 10;
}
[HttpPost]
公共问题(列出问题)
{
//把所有的问题都读在这里。
var x=10;
}

并放弃
根类。基于JSON结构,您不需要它。

根据序列化程序的不同,您可以设置不同的属性名。例如,使用Json.NET,您可以将属性编写为:

[JsonProperty("Questions")]
public List<Questions> SubQuestions { get; set; }
[JsonProperty(“问题”)]
公共列表子问题{get;set;}
请参见

您可以使用任何名称

public class AnyName
{
    public string Option { get; set; }
    public string Value { get; set; }
    public List<AnyName> Questions { get; set; }
}
公共类AnyName
{
公共字符串选项{get;set;}
公共字符串值{get;set;}
公共列表问题{get;set;}
}
因此,要反序列化的类型将是
List
,例如

var list = JsonConvert.DeserializeObject<List<AnyName>>(json);
var list=JsonConvert.DeserializeObject(json);

我已经更改了它。但我仍然在服务器端得到空值。请参阅已编辑的问题。此外,属性'questions'在JSON字符串中大小写较低,因此在class@AmitKumar再更新一次。行动的签名需要更改。@Tryee Jackson:我没有投反对票。我尝试了列表和简单类。在这两种情况下,我都得到了空值。@Tryee jackson:谢谢,它工作了。但我不明白为什么参数的类型是list@AmitKumarGhosh还解释了它将如何回答OP的问题json中缺少第三级的问题,这可能是您的问题的原因。请为缺少的“问题”节点设置空数组。通过对其进行反序列化,您肯定会得到解决方案。您向服务器发送任意名称数组时,我在服务器端得到空值。@AmitKumar查看我的更新答案。您的questions属性的大小写有问题。@AmitKumar如果没有服务器端代码,很难说什么。您的WebMethod的参数应该是
List
@EZI:我已经添加了我的服务器端和客户机代码。请参见此处。@AmitKumar
GetQuestion
s参数应为
List
public class AnyName
{
    public string Option { get; set; }
    public string Value { get; set; }
    public List<AnyName> Questions { get; set; }
}
var list = JsonConvert.DeserializeObject<List<AnyName>>(json);