一千萬個為什麽

搜索

JavaScriptSerializer可以排除具有空值/默認值的屬性嗎?

我正在使用JavaScriptSerializer來序列化一些實體對象。

問題是,許多公共屬性都包含null或默認值。有什麽辦法讓JavaScriptSerializer排除具有空值或默認值的屬性?

我希望得到的JSON不那麽冗長。

最佳答案

僅供參考,如果您想要使用更簡單的解決方案,以下是我使用JavaScriptSerializer實現JavaScriptConverter實現的方法:

    private class NullPropertiesConverter : JavaScriptConverter
    {
        public override object Deserialize(IDictionary dictionary, Type type, JavaScriptSerializer serializer)
        {
            throw new NotImplementedException();
        }

        public override IDictionary Serialize(object obj, JavaScriptSerializer serializer)
        {
            var jsonExample = new Dictionary();
            foreach (var prop in obj.GetType().GetProperties())
            {
               //check if decorated with ScriptIgnore attribute
               bool ignoreProp = prop.IsDefined(typeof(ScriptIgnoreAttribute), true);

                var value = prop.GetValue(obj, BindingFlags.Public, null, null, null);
                if (value != null && !ignoreProp)
                    jsonExample.Add(prop.Name, value);
            }

            return jsonExample;
        }

        public override IEnumerable SupportedTypes
        {
            get { return GetType().Assembly.GetTypes(); }
        }
    }

然後使用它:

    var serializer = new JavaScriptSerializer();
    serializer.RegisterConverters(new JavaScriptConverter[] { new NullPropertiesConverter() });
    return serializer.Serialize(someObjectToSerialize);

轉載註明原文: JavaScriptSerializer可以排除具有空值/默認值的屬性嗎?