需要帮助序列化/反序列化此JSON

Xon*_*hiz 1 c# json json.net

我有这个简单的JSON,我正在反序列化这个JSON,所以我可以获得元素.这是我的JSON:

{
  "QuestionIDs": [
    "QID1",
    "QID3"
  ],
  "QuestionDefinitions": {
    "Question1": {
      "DETag": "Q1",
      "Config": {
        "QDescription": "UseText"
      },
      "COrder": [
        "1",
        "2",
        "3"
      ],
      "Validation": {
        "Settings": {
          "ForceResponse": "OFF",
          "ForceResponseType": "ON",
          "Type": "None"
        }
      }
    }
  },
  "NextButton": null,
  "PreviousButton": false
}
Run Code Online (Sandbox Code Playgroud)

这是我写的代码:

[DataContract]
public class RootObject
{
    [DataMember]
    public Dictionary<string, Dictionary<string, string>> QuestionDefinitions { get; set; }
    [DataMember]
    public List<string> QuestionIDs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

QuestionIDs工作得很好.但是,QuestionDefinitions不起作用.它说它是一个空序列.我不确定是什么问题.

我希望能够访问QuestionDefinitions.

我试过了Json.Net.面对同样的问题.我能够得到简单的元素.但是,无法访问QuestionDefinitions.

任何帮助,将不胜感激.

编辑:

我也试过像这样实现这个类:

[DataContract]
public class QuestionDetails
{
    [DataMember]
    public string DETag { get; set; }
    [DataMember]
    [DataMember]
    public List<Configuration> Config { get; set; }
    [DataMember]
    public List<string> ChoiceOrder { get; set; }
    [DataMember]
    public List<Validation> Validation { get; set; }
    [DataMember]
    public List<string> COrder { get; set; }
    [DataMember]
    public string NextButton { get; set; }
    [DataMember]
    public string PreviousButton { get; set; }
}


    [DataContract]
    public class RootObject
    {
        [DataMember]
        public Dictionary<string, QuestionDetails> QuestionDefinitions { get; set; }
        [DataMember]
        public List<string> QuestionIDs { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

Ehs*_*jad 5

你的类结构反对JSON返回是不正确的.

json2csharp.com中粘贴您的JSON时,生成以下POCO类:

public class Config
{
    public string QDescription { get; set; }
}

public class Settings
{
    public string ForceResponse { get; set; }
    public string ForceResponseType { get; set; }
    public string Type { get; set; }
}

public class Validation
{
    public Settings Settings { get; set; }
}

public class Question1
{
    public string DETag { get; set; }
    public Config Config { get; set; }
    public List<string> COrder { get; set; }
    public Validation Validation { get; set; }
}

public class QuestionDefinitions
{
    public Question1 Question1 { get; set; }
}

public class RootObject
{
    public List<string> QuestionIDs { get; set; }
    public QuestionDefinitions QuestionDefinitions { get; set; }
    public object NextButton { get; set; }
    public bool PreviousButton { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在使用上述类作为您的JSON结构的代表,你应该能够在反序列化它的C#对象.

以下代码行将使用NewtonSoft库执行此操作:

string json = "your json result";
RootObject result = JsonConvert.DeserializeObject<RootObject>(json);
Run Code Online (Sandbox Code Playgroud)

如果您有2013年或更高版本,您可以在Visual Studio中执行此操作,如本文所述:

在此输入图像描述

希望能帮助到你.

  • 很酷的东西,我从来没有注意到"粘贴JSON作为类"!谢谢@EhsanSajjad (3认同)
  • json2csharp很方便,从来不知道这一点.谢谢! (2认同)