私は XML スキーマを提供され、xsd.exe を使用してそこからクラスを生成しました。clasees の 1 つは、次のような enum 型です。
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
public enum MyType
{
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("+Test")]
Test,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute(" ")]
Item,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute(" ")]
Item1,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute(" ")]
Item2,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute(" ")]
Item3,
}
この列挙型を使用するクラスを Item1 などの値でシリアル化すると、期待どおりの動作が得られ、要素は次のようになります。
<MyType> </MyType>
問題は、XmlSerializer の Deserialize メソッドを使用して XML を逆シリアル化しようとしたときです。メソッドは例外をスローしませんが、列挙値はItem1ではなくTestであると予想されます。
どうすればこれを機能させることができますか?できれば、生成されたコードを変更せずに?
ありがとう
アップデート:
逆シリアル化に使用されるコード:
public static T Deserialize<T>(string xml, Type[] extraTypes = null)
{
if (string.IsNullOrEmpty(xml))
{
return default(T);
}
XmlSerializer serializer = new XmlSerializer(typeof(T), extraTypes);
XmlReaderSettings settings = new XmlReaderSettings();
using (StringReader textReader = new StringReader(xml))
{
using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
{
return (T)serializer.Deserialize(xmlReader);
}
}
}
メソッドは次のように呼び出されます。
var result = Deserialize<MyType>(content);