gpt4 book ai didi

c# - 将单个实例序列化为多个 JSON 字符串

转载 作者:行者123 更新时间:2023-11-30 14:44:44 25 4
gpt4 key购买 nike

给定以下类:

public class Config {
public string Property1 {get; set;} = "foo";
public string Property2 {get; set;} = "bar";
public string Property3 {get; set;} = "baz";
public string Property4 {get; set;} = "baz1";
}

我想将此类的一个实例序列化为两个单独的 JSON 字符串。一些属性应该进入第一个 JSON 字符串:

{
"Property1": "foo",
"Property2": "bar"
}

而其余的属性应该进入另一个 JSON 字符串:

{
"Property3": "baz",
"Property4": "baz1"
}

属性的分配总是相同的,属性将分配给一个或另一个。

(我可以使用 JObject.Merge 将两个 JSON 字符串反序列化回单个对象。)

目前,我正在写入一对 JObject 实例,但这是一个维护噩梦 (json["Property1"] = x.Property1; json["Property2"] = x.Property2; 等)。

如何以更易于维护的方式执行此操作?

最佳答案

无缘无故地让生活变得复杂。这是解决问题的一种方法:

  1. 创建您自己的属性类。可以是每个序列化“批处理”一个类,也可以是一个带有序列化名称的类。例如,属性类的名称可以是 JsonSerializationBatchAttribute

  2. 像这样使用该属性装饰您的数据成员:

    public class Config {
[JsonSerializationBatch("1")]
public string Property1 {get; set;} = "foo";
[JsonSerializationBatch("1")]
public string Property2 {get; set;} = "bar";
[JsonSerializationBatch("2")]
public string Property3 {get; set;} = "baz";
[JsonSerializationBatch("2")]
public string Property4 {get; set;} = "baz1";
}
  1. 然后按此处所述实现条件序列化:

https://www.newtonsoft.com/json/help/html/ConditionalProperties.htm

在序列化函数中,检查属性是否具有带正确字符串的 JsonSerializationBatch 属性,并忽略所有不正确的属性。

只有当我有许多需要这种类型的序列化的对象时,我才会做这个复杂的事情。如果只有一个对象需要这样的序列化,那么我会倾向于将类拆分为多个类或使用匿名对象进行序列化。

关于c# - 将单个实例序列化为多个 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57857861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com