相关疑难解决方法(0)

JSON.net不包含EmitDefaultValue为false的null属性

我有一个包含许多数据合同的系统,其成员用以下内容进行装饰:

[DataMember(EmitDefaultValue = false)]  
Run Code Online (Sandbox Code Playgroud)

我有一个案例,当序列化为JSON时,我需要在null时包含成员.无论我选择哪种串行器设置,我都无法使用它.

   [TestMethod]
    public void SerializationTest()
    {

        var contract = Activator.CreateInstance(typeof(TestContract));

        var formatter = new JsonMediaTypeFormatter
        {
            SerializerSettings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Include,
                DefaultValueHandling = DefaultValueHandling.Ignore,
                TypeNameHandling = TypeNameHandling.All,
                ContractResolver = new DataContractResolver(),
                Binder = new DataContractBinder()
            }
        };

        var result = JsonConvert.SerializeObject(contract, formatter.SerializerSettings);
    }
Run Code Online (Sandbox Code Playgroud)

我甚至创建了一个自定义数据合约解析器,它为每个属性提供了额外的覆盖.

        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {                        
        var property = base.CreateProperty(member, MemberSerialization.Fields);                        
        property.NullValueHandling = NullValueHandling.Include;            
        property.DefaultValueHandling = DefaultValueHandling.Ignore;
        property.ShouldSerialize = o => true;
        return property;
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试了空值处理和默认值处理的所有变体来忽略emit默认值= false.根据json …

.net json.net datacontracts

2
推荐指数
1
解决办法
1549
查看次数

标签 统计

.net ×1

datacontracts ×1

json.net ×1