C# 反序列化列表Json C中的列表#

C# 反序列化列表Json C中的列表#,c#,json,list,deserialization,C#,Json,List,Deserialization,我有JSON格式的问题列表。每个答案都包含一个答案列表。当我反序列化它时,答案列表不会反序列化。我只是收到了一大堆答案的问题。我如何修复此问题? 我的反序列化 List<QuestionTxt> myDeserializedObjList = (List<QuestionTxt>)Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText(@"d:\test.txt"), typeof(List<Qu

我有JSON格式的问题列表。每个答案都包含一个答案列表。当我反序列化它时,答案列表不会反序列化。我只是收到了一大堆答案的问题。我如何修复此问题?

我的反序列化

List<QuestionTxt> myDeserializedObjList = (List<QuestionTxt>)Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText(@"d:\test.txt"), typeof(List<QuestionTxt>));
QuestionTxt

回答

class Answer
{
    private string text_;
    private string answer_;

    public Answer(string text, string answer)
    {
        this.text = text;
        this.answer = answer;
    }

    public string answer { get => answer_; set => answer_ = value; }
    public string text { get => text_; set => text_ = value; }
}

您的答案类需要有一个重载,它不接受这样的参数。当Newtonsoft尝试实例化对象时,它不知道该将什么交给构造函数的参数

public class Answer
{
     public Answer()
     {
     }
     public Answer(string text, string answer)
     {
         this.text = text;
         this.answer = answer;
     }

     public string AnswerName { get;set; }
     public string Text { get;set; }
}
您的QuestionTxt类包含以下内容:
private List answers\uu=new ListProperty
QuestionTxt.answers
应该是
public
(您有
内部的

当然,所有要反序列化的类都应该具有无参数构造函数

public class Answer
{
     public Answer()
     {
     }
     public Answer(string text, string answer)
     {
         this.text = text;
         this.answer = answer;
     }

     public string AnswerName { get;set; }
     public string Text { get;set; }
}
请注意,
JsonPropertyAttribute
可以自由地使用属性名遵循.Net约定,而不会违反json约定

public class QuestionTxt
{
    [JsonProperty("answers")]
    public List<Answer> Answers { get; set; }

    [JsonProperty("name")]
    public string Name{ get; set; }

    public Question()
    {
        Answers = new List<Answer>();
    }
}

public class Answer
{
    [JsonProperty("answer")]
    public string Value { get; set; }

    [JsonProperty("text")]
    public string Text { get; set; }
}
公共类问题
{
[JsonProperty(“答案”)]
公共列表答案{get;set;}
[JsonProperty(“名称”)]
公共字符串名称{get;set;}
公众问题(
{
答案=新列表();
}
}
公开课答案
{
[JsonProperty(“答案”)]
公共字符串值{get;set;}
[JsonProperty(“文本”)]
公共字符串文本{get;set;}
}

Show
QuestionTxt
class@Fabio添加了问题txt我们还需要查看答案对象。请将代码粘贴到您的问题中,不要链接图像。@DougEFresh Stack说这与我的问题中的许多代码有关,因此我无法添加文本。删除带有参数的
答案
构造函数,或添加另一个不带参数的构造函数(即,您认为如何才能构建一个不带参数的构造函数?)将答案更改为公共的、添加了不带参数的构造函数,问题仍然是,如果在对象中更改了json文件,则将其更改为大写的答案和文本属性。实际上,属性名称与对象名称相同可能并不好。让我们把它改为AnswerName“Property QuestionTxt.answers应该是公共的(您有内部的)”这解决了我的问题,谢谢。感谢所有在这里帮助我的人,我认为关于构造函数的评论也帮助了我。
public class QuestionTxt
{
    [JsonProperty()]
    internal List<Answer> answers { get; set; }  // notice internal!
    public string name { get; set; }

    public Question()
    {
        answers = new List<Answer>();
    }
}
public class QuestionTxt
{
    [JsonProperty("answers")]
    public List<Answer> Answers { get; set; }

    [JsonProperty("name")]
    public string Name{ get; set; }

    public Question()
    {
        Answers = new List<Answer>();
    }
}

public class Answer
{
    [JsonProperty("answer")]
    public string Value { get; set; }

    [JsonProperty("text")]
    public string Text { get; set; }
}