一尘不染

JavaScriptSerializer可以排除具有空值/默认值的属性吗?

json

我正在使用JavaScriptSerializer序列化一些实体对象。

问题是,许多公共属性都包含空值或默认值。有什么方法可以使JavaScriptSerializer排除具有null或默认值的属性?

我希望得到的JSON不再那么冗长。


阅读 680

收藏
2020-07-27

共1个答案

一尘不染

对我有用的解决方案:

序列化的类和属性将如下装饰:

[DataContract]
public class MyDataClass
{
  [DataMember(Name = "LabelInJson", IsRequired = false)]
  public string MyProperty { get; set; }
}

IsRequired是关键项。

实际的序列化可以使用DataContractJsonSerializer完成:

public static string Serialize<T>(T obj)
{
  string returnVal = "";
  try
  {
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
      serializer.WriteObject(ms, obj);
      returnVal = Encoding.Default.GetString(ms.ToArray());
    }
  }
  catch (Exception /*exception*/)
  {
    returnVal = "";
    //log error
  }
  return returnVal;
}
2020-07-27