XmlSerializer.Deserialize可以返回null吗?

时间:2010-09-15 14:01:57

标签: c# serialization xml-serialization

我一直尝试用几种不同的方法来获取XmlSerializer.Deserialize以返回null 但它似乎不可能

我试过一个类为null,格式错误的xml,格式良好的xml。

我可能会遗漏一些明显的东西,但这可能吗?

为了澄清给出一个可序列化的类MyClass,我想要通过类似的测试来传递

[Fact] //this is a the test attribute when using xUnit
public void When_xml_Something_Then_serialize_returns_null()
{
    string serializedObject = "<?xml version=\"1.0\" encoding=\"utf-8\"?><MyClass xmlns:xsi=\"http://www.w3asdsadasdasd.org/2001/XMLSchema-instance\"></MyClass>";
    using (var stringReader = new StringReader(serializedObject))
    {
        Assert.Null(new XmlSerializer(typeof(MyClass)).Deserialize(stringReader));
    }
}

在序列化字符串中尝试了不同的东西,我得到一个异常或MyClass的空实例:( 谢谢 注意:此问题中存在拼写错误,现在已更正

注2:有关更详细的答案,请查看评论。

2 个答案:

答案 0 :(得分:11)

是的,当输入不包含预期的XML时,Deserialize可以返回null。当XML命名空间混淆时,经常会出现这种情况。如果输入包含具有预期名称但在不同名称空间中的根元素,则将返回null。

在处理ASMX Web服务或Web引用时经常会出现这种情况,尤其是针对RPC样式服务的Web引用,其中消息是根据消息的XSD type来描述的,而不是以术语来描述element

答案 1 :(得分:0)

很明显,您可以viewdownload .NET框架的System.Xml部分的代码。这使您可以查看源代码以确定它何时返回null。