Ove*_*lew 11 c# asp.net asp.net-web-api
我试图找出如何使用ASP.NET WebApi指定备用属性名称 - 并使其适用于反序列化+序列化以及JSON + XML.到目前为止,我只发现了部分解决方案.
我希望将属性名称公开为带有下划线的小写,并且(例如)为了具有不同的内部名称:
外部:
内部:
对于测试,这是一个POST控制器动作,只是传递它接收的内容:
// POST api/values
public TestSerialization Post([FromBody]TestSerialization value)
{
return value;
}
Run Code Online (Sandbox Code Playgroud)
还有一个测试实体:
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; }
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现:
对于测试数据,我提交了4个属性,以查看反序列化的值,以及反序列化时的属性名称
我怎样才能做到这一点?
Kir*_*lla 15
您的一些调查结果/结论不正确......您可以尝试以下方法:
这应该适用于这两个网页API的默认XML和Json的格式化和两个串行化和反序列化.
[DataContract]
public class TestSerialization
{
[DataMember(Name = "field_one")]
public string ItemOne { get; set; }
[DataMember(Name = "field_two")]
public string ItemTwo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下内容仅适用于Json格式化程序以及序列化和反序列化.
public class TestSerialization
{
[JsonProperty(PropertyName = "field_one")]
public string ItemOne { get; set; }
[JsonProperty(PropertyName = "field_two")]
public string ItemTwo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将 JObject 传递给您的操作来强制 Asp.Net 使用 JSON 反序列化器,尽管这样做有点烦人。
然后您可以将其作为 JObject 或调用来使用,.ToObject<T>();
然后调用该JsonProperty
属性。
// POST api/values
public IHttpActionResult Post(JObject content)
{
var test = content.ToObject<TestSerialization>();
// now you have your object with the properties filled correctly.
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11515 次 |
最近记录: |