【问题标题】:Bind incoming JSON to models when DataMember names differ from property names当 DataMember 名称与属性名称不同时,将传入的 JSON 绑定到模型
【发布时间】:2012-09-11 14:43:04
【问题描述】:

我有这个模型类,它是通过向 .NET 4.5 Web Api 控制器发送 POST 请求来自动填充的。

[Serializable]
[DataContract(Name="Message")]

public class Message {

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

    [DataMember(Name="id")]
    public Guid id {get; set;}

}

现在,当我向控制器发送这样的请求时,我可以使用自动绑定的模型:

POST /messages/
text=foo&id=1

不幸的是,这只有效,因为 DataMember 名称与属性名称相同,只是小写。

但是,如果我的 DataMember Names 和属性名称不同怎么办,例如:

[DataMember(Name="content")]
public string text { get; set; }

POST /messages/
content=foo&id=1

然后会导致绑定错误,因为“内容”字段无法绑定到 Message.text

无论出于何种原因,DataMember 属性都会被忽略 - 如果在序列化中将使用它,而在反序列化中则不会。

【问题讨论】:

    标签: .net json api binding web


    【解决方案1】:

    您没有发送 JSON

    这是一个带有表单域的传统帖子

    POST /messages/
    text=foo&id=1
    

    JSON 将是

    {"text":"foo","id":1}
    

    我确定这不是对您正在寻找的内容的回应,但我认为您了解您没有发送 JSON 很重要

    【讨论】:

    • 谢谢,我在应用程序中发送了实际的 JSON - 不过这并没有什么区别。 [DataMember] 名称被忽略的问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多