0

私は 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);
4

0 に答える 0