WebApi - 反序列化和序列化备用属性名称

时间:2014-03-18 22:56:50

标签: c# asp.net asp.net-web-api

我正在试图弄清楚如何使用ASP.NET WebApi指定备用属性名称 - 并使其适用于反序列化+序列化以及JSON + XML。到目前为止,我只发现了部分解决方案。

我希望将属性名称公开为带有下划线的小写,并且(例如)为了具有不同的内部名称:

外部:

  • 字段酮
  • 字段二

内部:

  • ItemOne
  • ItemTwo

对于测试,这是一个POST控制器动作,只是传递它接收的内容:

// POST api/values
public TestSerialization Post([FromBody]TestSerialization value)
{
    return value;
}

一个测试实体:

public class TestSerialization
{
    [DataMember(Name = "field_one")] // Doesn't appear to change anything
    public string ItemOne { get; set; }

    [JsonProperty(PropertyName = "field_two")] // Only works for serialization in JSON mode
    public string ItemTwo { get; set; }
}

到目前为止,我发现:

  • [DataMember(Name =“x”)]对任一方向的序列化没有影响
  • [JsonProperty(Name =“x”)]在使用JSON时处理序列化(返回值)。 (这是一个JSON.NET属性,默认的序列化程序)。

对于测试数据,我提交了4个属性,以查看反序列化的值,以及反序列化时的属性名称

  • ItemOne =“价值A”
  • ItemTwo =“价值B”
  • field-one =“Correct 1”
  • field-two =“Correct 2”

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:15)

您的一些调查结果/结论不正确......您可以尝试以下方法:

这适用于 默认Xml& Web api的Json格式化程序以及序列化和反序列化。

[DataContract]
public class TestSerialization
{
    [DataMember(Name = "field_one")]
    public string ItemOne { get; set; }

    [DataMember(Name = "field_two")]
    public string ItemTwo { get; set; }
}

以下内容仅适用于Json格式化程序,适用于序列化和反序列化。

public class TestSerialization
{
    [JsonProperty(PropertyName = "field_one")]
    public string ItemOne { get; set; }

    [JsonProperty(PropertyName = "field_two")]
    public string ItemTwo { get; set; }
}