WCF服务返回XML

时间:2014-06-30 20:35:12

标签: c# xml wcf

我认为这是一个相当简单的问题,但无法在网上找到任何答案。我有一个WCF服务,它接受三个参数,并返回一个数字列表(ids)。现在,三个传入参数被完全忽略,我只是测试返回值。这是我遇到问题的地方。我需要以XML格式返回候选ID列表。规范要求列表如下:

<Disabled>
       <Candidate>123456789</Candidate>
       <Candidate>ABCDEFGHI</Candidate>
</Disabled>

如何让WCF服务返回这样的数据。使用列表时,数据返回如下:

<Disabled>
     <Candidate>
            <a:string>test</a:string>
            <a:string>test1</a:string>
     </Candidate>
<Disabled>

有没有办法在不要求我们的客户更改他们的规格的情况下将此更改为如上所示返回?

以下是我对请求和响应的数据交换:

 [DataContract]
    public class RequestDeactivated
    {
        [DataMember(Order = 0)]
        public string companyId { get; set; }
        [DataMember(Order = 1)]
        public string companyToken { get; set; }
        [DataMember(Order = 2)]
        public int verificationToken { get; set; }
    }

    [DataContract]
    public class ResponseDeactivated
    {
        [DataMember]
        public List<string> Candidate { get; set; }

    }

我从未创建过返回此类列表的服务,因此非常感谢任何帮助。 谢谢

编辑:我已经包含了处理实际返回内容的代码。请注意我现在只是在测试,并没有在这里添加逻辑。

public ResponseDeactivated Deactivate(RequestDeactivated data)
{
    ResponseDeactivated d = new ResponseDeactivated();
    d.Candidate = new List<string>();
    d.Candidate.Add("test");
    d.Candidate.Add("test1"); 
    return d;
}

1 个答案:

答案 0 :(得分:-1)

将根节点设置为字符串集合,其中集合中的每个项目的项目名称为&#34; Candidate&#34;。

[CollectionDataContract(ItemName = "Candidate")]
public class ResponseDeactivated : Collection<string>
{

}

然后你可以像这样序列化:

ResponseDeactivated o = new ResponseDeactivated();
o.Add("123456789");
o.Add("ABCDEFGHI");

DataContractSerializer serializer = new DataContractSerializer(typeof(ResponseDeactivated));            

serializer.WriteObject(stream, o);