我有一个WCF REST Web服务,并且具有多个字符串属性的数据交换。我希望能够接受空值(如下所示),但是在合同中将属性设置为可空字符串(string?
)会产生编译器错误。当我将datacontract属性保留为字符串时,它会在客户端向我发送xml时出错。它给出的错误是序列化错误。我试图做的是什么?
<myclass>
<somestring xsi:nil="true" />
<myclass>
答案 0 :(得分:2)
字符串不必被视为可空,因为它是引用类型而不是值类型,因此无论如何都可以为null。 string str = null;
编译得很好。
这不是有效的XML,但是可能导致运行时错误(不是编译时间)
试试这个
<myclass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<somestring xsi:nil="true" />
</myclass>
答案 1 :(得分:0)
您可以尝试省略元素或属性(我不记得WCF是否会接受此):
<myclass>
</myclass>
主要问题是您尚未定义xsi
命名空间。假设myclass
是文档的根目录:
<myclass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<somestring xsi:nil="true" />
</myclass>
请记住,xml
(http://www.w3.org/XML/1998/namespace
)和xmlns
(http://www.w3.org/2000/xmlns/
)是XML默认提供的唯一名称空间和前缀。
您还可以使用XmlSerializerFormatAttribute
并使用旧的System.Xml.Serialization
实施 - 它确实识别http://www.w3.org/2001/XMLSchema-instance
。
更多信息
String
无法在Nullable<T>
中使用,因为它不是值类型 - 您可以为其分配Null
,因为它是引用类型。在String
。DataContract