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);
}
相关推荐
追逐时光者5 小时前
一个基于 .NET 8 + DDD 搭建的模块化微服务框架
后端·.net
William_cl5 小时前
C# ASP.NET MVC 数据验证实战:View 层双保险(Html.ValidationMessageFor + jQuery Validate)
后端·c#·asp.net·mvc
狮子不白6 小时前
C#WEB 防重复提交控制
开发语言·前端·程序人生·c#
眠りたいです7 小时前
基于脚手架微服务的视频点播系统-客户端业务逻辑处理部分(三)-客户端主体部分完结
c++·微服务·云原生·架构·json·restful·qt6.7
Charles_go8 小时前
C#8、有哪些访问修饰符
java·前端·c#
yue00810 小时前
C# 求取整数的阶乘
java·开发语言·c#
黑咩狗夜.cm11 小时前
Aspose.word实现表格每页固定表头、最后一行填满整个页面
开发语言·c#·word
code bean12 小时前
【C#笔记】Newtonsoft.Json 中 `[JsonIgnore]` 的作用详解
笔记·c#·json
ccut 第一混12 小时前
用c# 制作一个扑克牌小游戏
开发语言·c#
友莘居士12 小时前
Ganache-CLI以太坊私网JSON-RPC接口执行环境搭建
网络协议·rpc·json·环境搭建·以太坊