Xml反序列化 - 在xml-data中的未知节点之后,所有字段都保持为空

时间:2011-01-15 19:10:10

标签: c# xml .net-2.0 xml-deserialization

我想使用XmlSerializer将xml-string反序列化为对象 xml-string包含其他未知节点,我想要反序列化的对象类不包含这些节点。 反序列化之后,未知节点之前的字段被填充(" ast"),但是之后的所有字段(" pfosten"不在对象类中)仍为空。

XML字符串:

<Baum>
   <ast>1</ast>
   <pfosten>2</pfosten>
   <wurzel>3</wurzel>
   <blatt>4</blatt>
</Baum>

对象的类:

[Serializable]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public class Baum
{
    public Baum() { }
    string _ast;
    string _wurzel;
    string _blatt;
    [System.Xml.Serialization.XmlElementAttribute(DataType = "NCName", Order = 0)]
    public string ast
    {

        get { return _ast; }

        set { _ast = value; }

    }
    [System.Xml.Serialization.XmlElementAttribute(DataType = "NCName", Order = 1)]
    public string wurzel
    {

        get { return _wurzel; }

        set { _wurzel = value; }

    }
     [System.Xml.Serialization.XmlElementAttribute(DataType = "NCName", Order = 2)]
    public string blatt
    {

        get { return _blatt; }

        set { _blatt = value; }

    }
}

我的代码看起来像这样:

private object DeserializeString(Type t, string s)
{
    object obj;
    XmlSerializer serializer = new XmlSerializer(t);
    serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode);

    using (var reader = new StringReader(s))
    {
        obj = serializer.Deserialize(reader);
    }
    return (obj);
}
private void serializer_UnknownNode(object sender, XmlNodeEventArgs e)
{
    Debug.WriteLine("UnknownNode Name: {0}", e.Name);
}

在调试期间,我可以看到,在&#34; pfosten&#34;上调用了serializer_UnknownNode()方法。以及每个后续节点。

我针对.Net 2.0编程。

希望我提供了所有信息,有人可以帮我解决这个问题! 非常感谢,和尚

1 个答案:

答案 0 :(得分:2)

评估顺序是否相关?

如果没有,请从所有属性的Order中删除XmlElementAttribute参数,它将反序列化为罚款,即:

[System.Xml.Serialization.XmlElementAttribute(DataType = "NCName")]
public string blatt
{

    get { return _blatt; }

    set { _blatt = value; }

}