c#-使用Newtonsoft Json.NET仅序列化派生类型
作者:互联网
是否有任何JsonSerializerSettings可用于仅序列化派生类型.
例如考虑一下我有以下两个班级.当我序列化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;}
}
解决方法:
诸如此类的问题通常反映了模型设计中的问题,但是,要做到的一种方法是摆脱继承.您可以尝试将对象转换为动态对象,然后对动态对象进行序列化:
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)
这样,您可以将其用于任何类型,并过滤属性以序列化序列,但是可以在helper类中进行选择.例如,您可以检查属性属性并确定是否应将其添加到动态对象.
标签:json-net,c 来源: https://codeday.me/bug/20191119/2033584.html