gpt4 book ai didi

c# - 使用 Newtonsoft Json.NET 仅序列化派生类型

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

是否有任何 JsonSerializerSettings 可用于仅序列化派生类型。

例如考虑我有以下两个类(class)。当我序列化 Employee 对象时,结果 json 应该只包含 employee 的属性而不是 person 类。

public class Person
{
public string Name { get; set; }
}

public class Employee : Person
{
public DateTime JoiningDate { get; set; }
public string EmployeeId { get; set;}
}

最佳答案

诸如此类的问题通常反射(reflect)了模型设计的问题,但是,做您想做的事情的一种方法是摆脱继承;您可以尝试将对象转换为动态对象,然后序列化动态对象:

class MyJson
{
public static string SerializeObject<T>(T obj, bool ignoreBase)
{
if (!ignoreBase)
{
return JsonConvert.SerializeObject(obj);
}

var myType = typeof(T);
var props = myType.GetProperties().Where(p => p.DeclaringType == myType).ToList();

var x = new ExpandoObject() as IDictionary<string, Object>;
props.ForEach(p => x.Add(p.Name, p.GetValue(obj, null)));

return JsonConvert.SerializeObject(x);
}
}

像这样调用它

MyJson.SerializeObject<Employee>(e, true)

通过这种方式,您可以将它用于任何类型并过滤属性以在帮助程序类中按您希望的方式进行序列化。例如,您可以检查属性属性并决定是否应将其添加到动态对象中。

关于c# - 使用 Newtonsoft Json.NET 仅序列化派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35071273/

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