对于WCF,DataContracts等人来说相当新,这是我关于SO的第一个问题。
问题: 我想向我的WCF服务发送一个xml请求。 请求具有以下布局;
<DataContractName>
<Other Stuff>
<Blah></Blah>
</Other Stuff>
<IdList>
<Id>1</Id>
<Id>2</Id>
<IdList>
</DataContractName>
[DataContract(Name="DataContractName")]
public sealed class Request
{
[DataMember]
public List<string> IdList :get;set;}
}
运行此请求最终以空列表结束,因此不会产生我预期的结果。 浏览网络并最终主要在Stackoverflow上找到我在下面找到的链接。 然而,他们似乎都没有对我有正确的回应。
How to send list of objects to WCF service?
how to pass List<Object> to WCF
Passing List<T> as parameter to WCF service operation
当我使用以下布局时,请求按预期工作。
有效吗
<DataContractName>
<Other Stuff>
<Blah></Blah>
</Other Stuff>
<IdList xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:string>1</a:string>
<a:string>2</a:string>
<IdList>
</DataContractName>
显然我希望能够摆脱列表元素的命名空间和字符串注释。 根据以下链接中的信息,必须可以不使用命名空间注释。
REST-ful WCF service: Deserializing C# List of Strings not working properly - &GT; https://msdn.microsoft.com/en-us/library/aa347850.aspx
然而,我无法使其发挥作用。
我做了什么: 创建了一个新的CollectionDataContract;
[CollectionDataContract]
public sealed class IdsList : Collection<string>
{
}
并在我现有的合同中使用它
[DataContract(Name="DataContractName")]
public sealed class Request
{
[DataMember]
public IdsList IdList {get;set;}
}
然而,当我运行它时,结果不是我所期望的(再次列出空列表)。
那么我该怎么做才能创建一个我的服务能理解的有效请求呢?
OT:为什么不只是一个简单的&lt; code&gt;标记
答案 0 :(得分:2)
我在这里测试了您的代码,我只是在属性中添加了一些数据并且工作正常。
首先,在接口中我声明了一个命名空间:
[DataContract(Namespace = "http://customnamespace")]
public class Result
{
[DataMember]
public string Bla { get; set; }
[DataMember]
public IdsList List { get; set; }
}
Secound,在集合类中,我还声明了命名空间(我使用了相同的接口)和itemname:
[CollectionDataContract(ItemName = "List", Namespace = "http://customnamespace")]
public class IdsList : List<string>
{
}
返回的xml在集合成员中没有名称空间声明。 希望它有所帮助。