我正在尝试找出如何在ASP.NET WebApi中指定替代属性名称,并使其适用于反序列化和序列化以及JSON和XML。目前我只发现了部分解决方案。我希望将属性名称公开为小写,带有下划线,并且(仅以示例为例)具有不同的内部名称:
外部:
- field-one - field-two
内部:
- ItemOne - ItemTwo
为测试,这里是一个POST控制器操作,只转发它接收到的内容:
外部:
- field-one - field-two
内部:
- 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 = "Value A"
- ItemTwo = "Value B"
- field-one = "Correct 1"
- field-two = "Correct 2"
我该如何实现这一点?