使用 Json.NET,如何将两个需要序列化的 C# 对象合并在一起?

With Json.NET, how can I merge two C# objects that need to be serialized together?

说我有一些类经常正常连载的,比如

public class A
{
    public A(int x, bool y)
    {
        X = x;
        Y = y;
    }

    [JsonProperty("x_thing")]
    public int X { get; }

    [JsonProperty("y_thing")]
    public bool Y { get; }
}

public class B
{
    public B(string s)
    {
        S = s;
    }

    [JsonProperty("string_thing")]
    public string S { get; }
}

如果我想从这里开始(但假设 AB 是任意对象):

var obj1 = new A(4, true);
var obj2 = new B("hello world");

...那么我怎样才能惯用地生成这个 JSON 序列化?

{
    "x_thing": 4,
    "y_thing": true,
    "string_thing": "hello world"
}

JObject 有一个 Merge 方法:

var json1 = JObject.FromObject(obj1);
var json2 = JObject.FromObject(obj2);
json1.Merge(json2);

// json1 now contains the desired result

fiddle


如果您的对象包含具有相同名称的属性,您可以使用带 JsonMergeSettings 对象的重载来指定应如何解决冲突。