繁体   English   中英

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

[英]Need help Serializing/Deserializing this JSON

我有这个简单的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
}

这是我写的代码:

[DataContract]
public class RootObject
{
    [DataMember]
    public Dictionary<string, Dictionary<string, string>> QuestionDefinitions { get; set; }
    [DataMember]
    public List<string> QuestionIDs { get; set; }
}

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; }
    }

您针对JSON返回的类strucutre不正确。

将JSON粘贴到json2csharp.com时 ,将生成以下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; }
}

现在,使用上述类作为JSON结构的表示,您应该可以将其反序列化为C#对象。

下面的代码行将使用NewtonSoft库来实现:

string json = "your json result";
RootObject result = JsonConvert.DeserializeObject<RootObject>(json);

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

在此处输入图片说明

希望能帮助到你。

稍微更改@EhsanSajjad的答案中的代码,也许您可​​以使用类似以下内容的代码:

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 Question
{
    public string DETag { get; set; }
    public Config Config { get; set; }
    public List<string> COrder { get; set; }
    public Validation Validation { get; set; }
}

public class RootObject
{
    public List<string> QuestionIDs { get; set; }
    public Dictionary<string, Question> QuestionDefinitions { get; set; }
    public object NextButton { get; set; }
    public bool PreviousButton { 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; }
}
public class QuestionDefinitions
{
    public Question1 Question1 { get; set; }
    public List<string> COrder { get; set; }
    public Validation Validation { get; set; }
}
public class Question1 {
    public string DETag { get; set; }
    public Config Config { get; set; }
}
public class Config {
    public string QDescription { get; set; }
}
public class Validation {
    public Settings Settings { get; set; }
}
public class Settings
{
    public string ForceResponse { get; set; }
    public string ForceResponseType { get; set; }
    public string Type { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM