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);
}
相关推荐
fkdw2 小时前
C# Newtonsoft.Json 反序列化派生类数据丢失问题
c#·json
浅尝辄止;5 小时前
C# 异步编程
c#
liyongqiangcc5 小时前
了解 ASP.NET Core 中的中间件
.net
ou.cs8 小时前
c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入
c#
Kiros_Jiang8 小时前
开源低代码平台-Microi吾码 打印引擎使用
javascript·开源·json·.net·pip
一只小小汤圆10 小时前
编译笔记:vs 中 正在从以下位置***加载符号 C# 中捕获C/C++抛出的异常
c++·c#
码农君莫笑10 小时前
Blazor项目中使用EF读写 SQLite 数据库
linux·数据库·sqlite·c#·.netcore·人机交互·visual studio
呆呆小雅11 小时前
C#关键字volatile
java·redis·c#
boligongzhu11 小时前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa