所以这是场景,我有一个被序列化为json对象的类:
public classA
{
[JsonProperty("A")]
public string A { get; set; }
[JsonProperty("B")]
public string B { get; set; }
}
我将它序列化为json字符串,如下所示:
var serializedObject = JsonConvert.SerializeObject(new classA
{
A = "stingAAAA",
B = "stringBBBBB"
});
现在,我有另一个班级:
public classB
{
[JsonProperty("C")]
public string C { get; set; }
[JsonProperty("D")]
public string D { get; set; }
}
我想将ClassB
对象的属性附加到正在生成的json字符串,但不将所有属性(C和D)复制到ClassA
。所以基本上最后的json字符串应该处理ClassB对象的属性,就好像它们是ClassA itsef的属性一样。它甚至可能吗?
答案 0 :(得分:0)
我看到了两个解决方案:
1.使用来自两个对象的值创建字典
2.用2个属性(classA和classB)创建新类
var a = new classA { A = "stingAAAA", B = "stringBBBBB" };
var b = new classB { C = "CCC", D = "DDD" };
1:
var dictA = a.GetType().GetProperties().ToDictionary(x => x.GetCustomAttributes(false).OfType<JsonPropertyAttribute>().FirstOrDefault()?.PropertyName ?? x.Name, y => y.GetValue(a));
var dictB = b.GetType().GetProperties().ToDictionary(x => x.GetCustomAttributes(false).OfType<JsonPropertyAttribute>().FirstOrDefault()?.PropertyName ?? x.Name, y => y.GetValue(b));
var result = new[] { dictA, dictB }.SelectMany(dict => dict)
.ToDictionary(pair => pair.Key, pair => pair.Value);
var res = JsonConvert.SerializeObject(result);
// Result: {"A":"stingAAAA","B":"stringBBBBB","C":"CCC","D2":"DDD"}
2:
var newClass = new { ClassA = a, ClassB = b };
var res2 = JsonConvert.SerializeObject(newClass);
// Result: {"ClassA":{"A":"stingAAAA","B":"stringBBBBB"},"ClassB":{"C":"CCC","D2":"DDD"}}
然而,两者都有缺点。
1 - 如果classA和classB都具有相同名称的属性(或JsonPropertyAttribute),则会出现问题
2 - 你的结果将有2个属性,你需要的所有属性都在其中。