Использование автоматически сгенерированного прокси-класса из XSD (.Net C # 4.0) - PullRequest
0 голосов
/ 16 июня 2011

Я использовал xsd.exe для создания прокси-класса с именем «FacturaE».

Я могу создать экземпляр этого класса, заполнить его информацией и сохранить в XML с помощью XmlSerializer.

Но, если файл XML хорошо отформатирован, как я могу прочитать его в "FacturaE"?

Спасибо

1 Ответ

0 голосов
/ 16 июня 2011

В качестве замены xsd.exe, Xsd2Code - гораздо более полнофункциональный генератор классов. Он может добавлять методы к сгенерированным классам для сериализации и десериализации из Xml.

Ниже приведен пример методов сериализации / десериализации, сгенерированных Xsd2Code:

    /// <summary>
    /// Serializes current EntityBase object into an XML document
    /// </summary>
    // <returns>string XML value</returns>
    public virtual string Serialize() {
        System.IO.StreamReader streamReader = null;
        System.IO.MemoryStream memoryStream = null;
        try {
            memoryStream = new System.IO.MemoryStream();
            Serializer.Serialize(memoryStream, this);
            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            streamReader = new System.IO.StreamReader(memoryStream);
            return streamReader.ReadToEnd();
        }
        finally {
            if (streamReader != null) {
                streamReader.Dispose();
            }
            if (memoryStream != null) {
                memoryStream.Dispose();
            }
        }
    }

    /// <summary>
    /// Deserializes workflow markup into an EntityBase object
    /// </summary>
    // <param name="xml">string workflow markup to deserialize</param>
    // <param name="obj">Output EntityBase object</param>
    // <param name="exception">output Exception value if deserialize failed</param>
    // <returns>true if this XmlSerializer can deserialize the object; otherwise, false</returns>
    public static bool Deserialize(string xml, out T obj, out System.Exception exception) {
        exception = null;
        obj = default(T);
        try {
            obj = Deserialize(xml);
            return true;
        }
        catch (System.Exception ex) {
            exception = ex;
            return false;
        }
    }

    public static bool Deserialize(string xml, out T obj) {
        System.Exception exception = null;
        return Deserialize(xml, out obj, out exception);
    }

    public static T Deserialize(string xml) {
        System.IO.StringReader stringReader = null;
        try {
            stringReader = new System.IO.StringReader(xml);
            return ((T)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
        }
        finally {
            if (stringReader != null) {
                stringReader.Dispose();
            }
        }
    }
...