如何在Json.Net中仅在派生类中序列化非null属性

时间:2016-10-07 13:47:56

标签: c# json asp.net-mvc serialization json.net

实体对象需要转换为字符串以将其存储在日志文件中以供人类阅读。 属性可以在运行时添加到派生实体。 Serialize在实体基类中定义。 我尝试下面的代码,但它也返回具有空值的属性。 由于许多属性具有空值,因此难以阅读日志。

Hoq只序列化非空属性? 我也试过了

        var jsonSettings = new JsonSerializerSettings()
        {
            DefaultValueHandling = DefaultValueHandling.Ignore,
            Formatting = Formatting.Indented,
            TypeNameHandling= TypeNameHandling.All
        };
        return JsonConvert.SerializeObject(this, GetType(), jsonSettings);

这只序列化了newtonsoft json does not serialize derived class properties

中确认的EntityBase类属性
public class EntityBase {

        public string Serialize()
        {
            var s = new System.Web.Script.Serialization.JavaScriptSerializer();
            s.Serialize(this);

        }
     }

public class Customer: EntityBase {
  public string Name, Address;
  }

测试用例:

  var cust= new Customer() { Name="Test"};
  Debug.Writeline( cust.Serialize());

观察:结果包含"地址":null

预期:结果不应包含地址属性。

使用ASP.NET /Mono MVC4,.NET 4.6

1 个答案:

答案 0 :(得分:1)

您可以创建自己的序列化程序来忽略null属性。

            JsonConvert.SerializeObject(
                object, 
                Newtonsoft.Json.Formatting.None, 
                new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                });