来自JSON的自定义C#对象

时间:2018-04-07 15:26:17

标签: c# .net json

我收到以下JSON响应。

[
  {
    "Issue": {
      "ID": 80,
      "Name": "Cold",
      "Accuracy": 90,
      "Icd": "J00",
      "IcdName": "Acute nasopharyngitis [common cold]",
      "ProfName": "Common cold",
      "Ranking": 1
    },
    "Specialisation": [
      {
        "ID": 15,
        "Name": "General practice",
        "SpecialistID": 0
      }
    ]
  }
]

我尝试按照here给出的说明进行操作。但我似乎无法在这里找到解决方案。并且在文档中仅解释了已预定义类的方案。有什么帮助吗?

2 个答案:

答案 0 :(得分:5)

的推定

你的问题甚至不清楚。你在问什么?我假设你问的是如何从那个JSON创建一个C#类?

解决方案

首先,JSON是一个数组(如果它的顶级标签是[],它是一个数组本身。如果它的顶级是{},那么它就是一个对象。

所以你所拥有的是一个返回的数组,其中包含一个结果。

转到json2csharp并粘贴代码即可:

public class Issue
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Accuracy { get; set; }
    public string Icd { get; set; }
    public string IcdName { get; set; }
    public string ProfName { get; set; }
    public int Ranking { get; set; }
}

public class Specialisation
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int SpecialistID { get; set; }
}

public class RootObject
{
    public Issue Issue { get; set; }
    public List<Specialisation> Specialisation { get; set; }
}

你可以看到它创建的RootObject几乎表示它是一个单个对象,但你需要将其反序列化为List<RootObject>,而不仅仅是RootObject

所以在C#中将是var result = JsonConvert.DeserializeObject<List<RootObject>>(theJsonString);

答案 1 :(得分:0)

你应该有一个强类型的c#类准备好让你的Json Response被反序列化为... Json Utils有一个生成器可供使用,它想出了这个:

conv_pure

然后使用

public class Issue
{

    [JsonProperty("ID")]
    public int ID { get; set; }

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

    [JsonProperty("Accuracy")]
    public int Accuracy { get; set; }

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

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

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

    [JsonProperty("Ranking")]
    public int Ranking { get; set; }
}

public class Specialisation
{

    [JsonProperty("ID")]
    public int ID { get; set; }

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

    [JsonProperty("SpecialistID")]
    public int SpecialistID { get; set; }
}

public class RootObject
{

    [JsonProperty("Issue")]
    public Issue Issue { get; set; }

    [JsonProperty("Specialisation")]
    public IList<Specialisation> Specialisation { get; set; }
}

我不是100%确定这个类对你有好处,我从来没有一个响应,其中根响应是一个数组,没有先定义一个根属性,看看它是如何从开始的“[ “而不是 { ???您可能还想尝试

RootObject jsonAsCSharpClass = JsonConvert.DeserializeObject<RootObject>(jsonResponse);

或者等待有关该主题的更多知识的人来...