使用 JSON 填充现有对象

Posted

技术标签:

【中文标题】使用 JSON 填充现有对象【英文标题】:Populate an existing object with JSON 【发布时间】:2016-01-13 07:16:11 【问题描述】:

我像这样使用 Json.Net 填充一个类:

var account = JsonConvert.DeserializeObject<Account>(result.ToString());

上面的结果 JSON 字符串填充了我的 Account 类中的几个属性。后来我有了一个新的 JSON 字符串,并希望用剩余的属性填充相同的 Account 类。这可以使用 JSON.NET 或 JsonConvert 方法吗?我基本上想追加/添加到我在上面的代码行中填充的帐户对象。

我的班级:

public class Account

    public string CID  get; set;             
    public string jsonrpc  get; set; 
    public string id  get; set; 
    public List<string> mail  get; set; 
    public List<string> uid  get; set; 
    public List<string> userPassword  get; set;             

【问题讨论】:

您提前知道第一次和第二次将填充哪些属性? 是的。前 3 个属性将首先填充,然后是最后 3 个。 所以听起来很简单,只需手动硬编码即可。喜欢MyObject.mail = NewObject.mail; MyObject.mail = NewObject.uid; MyObject.userPassword = NewObject.userPassword; 【参考方案1】:

是的,您可以使用 JsonConvert.PopulateObject() 从第二个 JSON 字符串中填充现有对象的属性。

这是一个例子:

string json1 = @"

    ""CID"": ""13579"",
    ""jsonrpc"": ""something"",
    ""id"": ""24680""
";

Account account = JsonConvert.DeserializeObject<Account>(json1);

string json2 = @"

    ""mail"": [ ""abc@example.com"", ""def@example.org"" ],
    ""uid"": [ ""87654"", ""192834"" ],
    ""userPassword"": [ ""superSecret"", ""letMeInNow!"" ]
";

JsonConvert.PopulateObject(json2, account);

Console.WriteLine("CID: " + account.CID);
Console.WriteLine("jsonrpc: " + account.jsonrpc);
Console.WriteLine("id: " + account.id);
Console.WriteLine("mail: " + string.Join(", ", account.mail));
Console.WriteLine("uid: " + string.Join(", ", account.uid));
Console.WriteLine("userPassword: " + string.Join(", ", account.userPassword));

输出:

CID: 13579
jsonrpc: something
id: 24680
mail: abc@example.com, def@example.org
uid: 87654, 192834
userPassword: superSecret, letMeInNow!

小提琴:https://dotnetfiddle.net/621bfV

【讨论】:

以上是关于使用 JSON 填充现有对象的主要内容,如果未能解决你的问题,请参考以下文章

需要来自 txt 文件的数据,以逗号分隔,以使用现有类中的对象填充数组列表

Python 和 JSON - 附加到字符串对象

使用 Json.NET 使用新的部分 JSON 数据修改现有对象

在 Swift 中使用 JSON 对象填充表视图

如何使用服务器的 JSON 响应对象(而不是完整对象)中的属性来填充 Kendo 网格?

如何使用 Json 对象填充动态添加的输入字段