空值的 WCF DataContract 反序列化问题
假设我有类似的内容:
[DataContract(Namespace="http://bla.bla")]
public class MyClass {
[DataMember] public long ResponseCode { get; set; }
[DataMember] public long Fee { get; set; }
}
以下内容来自频道:
<ns0:MyResult>
<ns2:ResponseCode xmlns:ns2="http://bla.bla">101</ns2:ResponseCode>
<ns2:Fee xmlns:ns2="http://bla.bla"></ns2:Fee>
</ns0:MyResult>
我收到错误:
----> System.Xml.XmlException:值“”无法解析为类型“Int64”。 ----> System.FormatException:输入字符串的格式不正确。
我不明白为什么。 DataContract
的 IsRequired
参数的默认值为 false
,因此我希望它能够无错误地反序列化,并使用该类型的默认值初始化缺失值(零)。我缺少什么?
Say i have something like:
[DataContract(Namespace="http://bla.bla")]
public class MyClass {
[DataMember] public long ResponseCode { get; set; }
[DataMember] public long Fee { get; set; }
}
and the following is coming from a channel:
<ns0:MyResult>
<ns2:ResponseCode xmlns:ns2="http://bla.bla">101</ns2:ResponseCode>
<ns2:Fee xmlns:ns2="http://bla.bla"></ns2:Fee>
</ns0:MyResult>
I'm getting the error:
----> System.Xml.XmlException : The value '' cannot be parsed as the type 'Int64'.
----> System.FormatException : Input string was not in a correct format.
I don't understand why. The default value of IsRequired
parameter of DataContract
is false
so i expect it to deserialize without errors and initialize the missing value with default values for the type (zero). What am i missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
来自 - http://msdn.microsoft.com/en-us/library/ aa347792.aspx
而不是“给定数据成员值”,
因此您的 XML 应该不带
元素才能使其正常工作但是,我我也在寻找您问题的解决方案。如何让我的 WCF 捕获此异常并自动为 int 或 date 类型设置其默认值。
另一个想法是,如果我尝试遵循 - 使用 i:nil="true" -
它应该能够设置自定义默认值。我不一定希望客户端缺少元素来指示传递的默认值。缺少元素也可能意味着客户端正在使用旧版本的数据合约。
from - http://msdn.microsoft.com/en-us/library/aa347792.aspx
and not 'given data member value'
so you should have your XML without
<ns2:Fee>
element to make it workHowever, I am also looking for solution to your problem. How can I make my WCF catch this exception and set its default value automatically for type int or dates.
Another idea is if i try following - using i:nil="true" -
it should be able to set custom default value. I do not necessarily want a missing element from client to indicate default value passed. Missing element could also mean client is using older version of data contract.