You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Newtonsoft Json.NET能否将JSON反序列化至已有对象?

Newtonsoft Json.NET:反序列化至已存在对象的实现方法

当然支持!Newtonsoft Json.NET专门提供了JsonConvert.PopulateObject()方法来搞定这个需求——它能把JSON数据里的对应成员值覆盖到你已经创建好的对象上,没在JSON里提到的成员会保留原来的取值,不会被清空或重置。

举个实际的例子帮你理解:

首先定义一个简单的实体类:

public class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

先创建一个已经有初始值的对象:

var existingUser = new User
{
    Name = "Alice",
    Age = 30,
    Email = "alice@example.com"
};

现在有一段只包含部分字段的JSON:

{
    "Name": "Alice Smith",
    "Age": 31
}

用PopulateObject()把JSON数据填充到已存在的对象里:

string json = @"{""Name"":""Alice Smith"",""Age"":31}";
JsonConvert.PopulateObject(json, existingUser);

执行完之后,existingUser的Name会更新为"Alice Smith",Age变成31,而Email依然保留原来的"alice@example.com"——完全符合你要的「仅覆盖JSON包含的对应成员」的需求。

另外补充几个实用细节:

  • 如果JSON字段类型和对象成员不匹配,会抛出序列化异常,和常规反序列化一样需要做好异常处理
  • 对于嵌套的复杂类型,PopulateObject()会递归填充嵌套对象的对应成员,而不是直接替换整个嵌套对象(除非JSON里明确指定了完整的嵌套对象结构)
  • 要是需要更精细的控制,可以配合JsonProperty特性或者自定义JsonConverter来调整填充行为

内容的提问来源于stack exchange,提问作者jsmars

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:55:43