Json.NET 单个对象Json字符串反序列成两个不同实体对象

本文主要介绍Newtonsoft.JSON(Json.NET)中,将一个对象的Json字符串反序化成两个不同的实体对象的方法代码。具体效果如下:

Json字符串

[{
  "guardian_id": "1453",
  "guardian_name": "Foo Bar",
  "patient_id": "938",
  "patient_name": "Foo Bar",
}]

反序列化成的两个Model实例对象

class Guardian {
  [JsonProperty(PropertyName = "guardian_id")]
  public int ID { get; set; }
  [JsonProperty(PropertyName = "guardian_name")]
  public int Name { get; set; }
}

class Patient {
  [JsonProperty(PropertyName = "patient_id")]
  public int ID { get; set; }
  [JsonProperty(PropertyName = "patient_name")]
  public int Name { get; set; }
}

1、分别反序化成实体(model)对象

string json = @"[{'guardian_id':'1453','guardian_name':'Foo Bar','patient_id':'938','patient_name':'Foo Bar'}]";
var guardians = JsonConvert.DeserializeObject<List<Guardian>>(json);
var patients = JsonConvert.DeserializeObject<List<Patient>>(json);

2、通过Pair类反序化

反序化一次就可以实现

Pair类如下

public class Pair
{
    public Pair()
    {
        Guardian = new Guardian();
        Patient = new Patient();
    }
    [JsonIgnore]
    public Guardian Guardian { get; set; }
    [JsonIgnore]
    public Patient Patient { get; set; }
    [JsonProperty(PropertyName = "guardian_id")]
    public int GuardianID
    {
        get { return Guardian.ID; }
        set { Guardian.ID = value; }
    }
    [JsonProperty(PropertyName = "guardian_name")]
    public string GuardianName
    {
        get { return Guardian.Name; }
        set { Guardian.Name = value; }
    }
    [JsonProperty(PropertyName = "patient_id")]
    public int PatientID
    {
        get { return Patient.ID; }
        set { Patient.ID = value; }
    }
    [JsonProperty(PropertyName = "patient_name")]
    public string PatientName
    {
        get { return Patient.Name; }
        set { Patient.Name = value; }
    }
}

反序列化代码

string json = @"[{'guardian_id':'1453','guardian_name':'Foo Bar','patient_id':'938','patient_name':'Foo Bar'}]";
var pairs = JsonConvert.DeserializeObject<Pair[]>(json);
if (pairs.Any())
{
    var pair = pairs[0];
    Console.WriteLine(pair.Guardian.Name);
    Console.WriteLine(pair.Patient.Name);
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 17:30:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 17:30:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 17:30:05       82 阅读
  4. Python语言-面向对象

    2023-12-05 17:30:05       91 阅读

热门阅读

  1. 软件工程 单选多选补充 复刻

    2023-12-05 17:30:05       65 阅读
  2. leetcode 208. 实现 Trie (前缀树)

    2023-12-05 17:30:05       55 阅读
  3. Android 14 CarAudioService

    2023-12-05 17:30:05       53 阅读
  4. Dockerfile 与 Docker Compose区别

    2023-12-05 17:30:05       41 阅读
  5. 分布式和集群区别和优势

    2023-12-05 17:30:05       56 阅读
  6. 关于嵌入式系统一些名词的小结(ARM/CORTEX/STM32等)

    2023-12-05 17:30:05       49 阅读