XmlSerializer.Deserialize可以返回null吗?

rou*_*sis 4 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

注2:有关更详细的答案,请查看注释.

Joh*_*ers 11

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

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