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に対してプログラムします。
私がすべての情報を提供し、誰かがこれを手伝ってくれることを願っています!
どうもありがとう、僧侶