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

本文关键字:序列化 属性 派生 Json Net | 更新日期: 2023-09-27 18:11:58

实体对象需要转换为字符串以存储在日志文件中供人阅读。属性可以在运行时添加到派生实体中。序列化在实体基类中定义。我尝试下面的代码,但它返回属性与空值也。由于许多属性都是空值,这使得日志很难读取。

如何只序列化非空属性?

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

只序列化newtonsoft中确认的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;
  }

testcase:

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

Observed: result包含"Address": null

预期:结果不应该包含Address属性。

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

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

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

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