Json.net反序列化,忽略DataMember(Name)属性

时间:2017-07-11 08:42:20

标签: asp.net-mvc asp.net-web-api json.net asp.net-web-api2 json-deserialization

我有一个课程如下。

[Datacontract]
public class Customer
{
    [DataMember(Name="p1")]
    public string Name { get; set; }

    [DataMember(Name = "p2")]
    public string SurName { get; set; }        
}

案例1

JSON:{ “名称”: “约翰”, “姓”: “ASDF”}

反序列化对象: customer.Name => null和customer.SurName =>空

案例2

Json:{“p1”:“John”,“p2”:“Asdf”}

反序列化对象: customer.Name => John和customer.SurName => ASDF

问题:

我在Case1 =>中有json { “名称”: “约翰”, “姓”: “ASDF”}

我在Case2 =>中等待反序列化的对象 customer.Name => John和customer.SurName => ASDF

那么,在反序列化期间如何提供忽略DataMember(Name)属性的方法?

解决:

    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        var property = base.CreateProperty(member, memberSerialization);
        property.PropertyName = member.Name;

        return property;
    }

谢谢@dbc

2 个答案:

答案 0 :(得分:0)

以这种方式定义类属性:

[JsonProperty(Required = Newtonsoft.Json.Required.AllowNull)]
public string Name  { get; set;}

答案 1 :(得分:0)

你能用下面的反序列化吗? :

var customerModelData = JsonConvert.DeserializeObject<Customer>(jsonCustomerData);