编程语言
首页 > 编程语言> > c#-使用Newtonsoft Json.NET仅序列化派生类型

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