Can JavaScriptSerializer exclude properties with null/default values?

前端 未结 7 1163
野趣味
野趣味 2020-12-01 05:08

I\'m using JavaScriptSerializer to serialize some entity objects.

The problem is, many of the public properties contain null or default values. Is there any way to m

7条回答
  •  无人及你
    2020-12-01 05:54

    This code is block null and default(0) values for numeric types

    private class NullPropertiesConverter: JavaScriptConverter {
     public override object Deserialize(IDictionary < string, object > dictionary, Type type, JavaScriptSerializer serializer) {
      throw new NotImplementedException();
     }
    
     public override IDictionary < string, object > Serialize(object obj, JavaScriptSerializer serializer) {
      var jsonExample = new Dictionary < string,
       object > ();
      foreach(var prop in obj.GetType().GetProperties()) {
       //this object is nullable 
       var nullableobj = prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable < > );
       //check if decorated with ScriptIgnore attribute
       bool ignoreProp = prop.IsDefined(typeof(ScriptIgnoreAttribute), true);
    
       var value = prop.GetValue(obj, System.Reflection.BindingFlags.Public, null, null, null);
       int i;
       //Object is not nullable and value=0 , it is a default value for numeric types 
       if (!(nullableobj == false && value != null && (int.TryParse(value.ToString(), out i) ? i : 1) == 0) && value != null && !ignoreProp)
        jsonExample.Add(prop.Name, value);
      }
    
      return jsonExample;
     }
    
     public override IEnumerable < Type > SupportedTypes {
      get {
       return GetType().Assembly.GetTypes();
      }
     }
    }
    

提交回复
热议问题