为了账号安全,请及时绑定邮箱和手机立即绑定

需要帮助序列化/反序列化这个 JSON

需要帮助序列化/反序列化这个 JSON

C#
萧十郎 2021-11-21 15:50:36
我有这个简单的 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.任何帮助,将不胜感激。
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

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


将您的 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 中执行此操作,如下文所述:

//img1.sycdn.imooc.com//6199fa680001476007140633.jpg

查看完整回答
反对 回复 2021-11-21
?
撒科打诨

TA贡献1934条经验 获得超2个赞

也许您可以使用以下内容:


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

}


查看完整回答
反对 回复 2021-11-21
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

试试这个模型


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

}


查看完整回答
反对 回复 2021-11-21
  • 3 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信