WCF服务可选datamember

时间:2014-03-04 08:27:24

标签: c# wcf data-members

我有一个需要返回Json响应的WCF服务:

{
"Content": {
"Id": 817
"Message":"message"
},
"Status": "Ok"
}

这里的message参数在某些情况下是可选的,它存在,而在某些情况下它不存在。我尝试使用以下DataContract使其工作。但它似乎没有用。我在每个响应中得到一条包含消息为null的响应。

[DataContract]
public class CreateNewCandidate_Response
{
    [DataMember(Order=0, IsRequired=true)]
    public string Status { get; set; }
    [DataMember(Order = 1, IsRequired = false, EmitDefaultValue = false)]
    public CreateNewCandidate_Response_Content Content { get; set; }
    [DataMember(Order = 1, IsRequired = false, EmitDefaultValue = false)]
    public error Errors { get; set; }

}

public class error
{
    [DataMember(Order = 0)]
    public string Code { get; set; }
    [DataMember(Order = 1, IsRequired = false, EmitDefaultValue = false)]
    public string Message { get; set; }
}

public class CreateNewCandidate_Response_Content
{
    [DataMember(Order = 0, IsRequired = true, EmitDefaultValue = true)]
    public int CandidateId { get; set; }
    [DataMember(Order = 0, IsRequired = false, EmitDefaultValue = false)]
    public string Message { get; set; }
}

如何让它以我想要的格式返回响应?

1 个答案:

答案 0 :(得分:2)

简短的回答是: Bart Beyers是正确的,应用[DataContract]属性。

长的anser来自MSDN:

  

您创建的新复杂类型必须具有为其序列化的数据协定。默认情况下,DataContractSerializer会推断数据协定并序列化所有公开可见的类型。所有公共读/写属性和类型的字段都是序列化的。

http://msdn.microsoft.com/en-us/library/ms733127%28v=vs.110%29.aspx