3

XmlSerializerを使用してxml文字列をオブジェクトに逆シリアル化したい。
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);
}

デバッグ中に、serializer_UnknownNode()メソッドが「pfosten」で呼び出され、後続の各ノードでも呼び出されることがわかります。

.Net2.0に対してプログラムします。

私がすべての情報を提供し、誰かがこれを手伝ってくれることを願っています!
どうもありがとう、僧侶

4

1 に答える 1

2

評価の順序は適切ですか?

Orderそうでない場合は、すべてのプロパティからパラメータを削除すると、正常XmlElementAttributeに逆シリアル化されます。

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

    get { return _blatt; }

    set { _blatt = value; }

}
于 2011-01-15T19:24:22.090 に答える