Преобразование объекта в строку XML


у меня есть класс с именем WebserviceType Я получил от инструмента xsd.exe из файла XSD.

теперь я хочу десериализовать экземпляр WebServiceType объект в строку. Как я могу это сделать?

The MethodCheckType объект имеет в качестве параметров a WebServiceType массив.

моя первая попытка была, как я сериализовать его: с XmlSerializer и StringWriter (при сериализации я использовал StringReader).

это метод, в котором я сериализовать WebServiceType объект:

XmlSerializer serializer = new XmlSerializer(typeof(MethodCheckType));
        MethodCheckType output = null;
        StringReader reader = null;

        // catch global exception, logg it and throw it
        try
        {
            reader = new StringReader(path);
            output = (MethodCheckType)serializer.Deserialize(reader);
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            reader.Dispose();
        }

        return output.WebService;

Edit:

может быть, я мог бы сказать это другими словами: у меня есть экземпляр этого MethodCheckType объект с другой стороны у меня есть XML-документ, из которого я сериализовать этот объект. Теперь я хочу преобразовать этот экземпляр в XML-документ в виде строки. После этого я должен доказать, что обе строки (XML-документов) одинаковы. Это я должен сделать, потому что я делаю модульные тесты первого метода, в котором я читаю XML-документ в StringReader и сериализовать его в MethodCheckType "объект".

3 61

3 ответа:

вот метод преобразования для обоих способов. это = экземпляр вашего класса

public string ToXML()
    {
        var stringwriter = new System.IO.StringWriter();
        var serializer = new XmlSerializer(this.GetType());
        serializer.Serialize(stringwriter, this);
        return stringwriter.ToString();
    }

 public static YourClass LoadFromXMLString(string xmlText)
    {
        var stringReader = new System.IO.StringReader(xmlText);
        var serializer = new XmlSerializer(typeof(YourClass ));
        return serializer.Deserialize(stringReader) as YourClass ;
    }

Я понимаю, что это очень старый пост, но после просмотра ответа L. B я подумал о том, как я мог бы улучшить принятый ответ и сделать его общим для моего собственного приложения. Вот что я придумал:

public static string Serialize<T>(T dataToSerialize)
{
    try
    {
        var stringwriter = new System.IO.StringWriter();
        var serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(stringwriter, dataToSerialize);
        return stringwriter.ToString();
    }
    catch
    {
        throw;
    }
}

public static T Deserialize<T>(string xmlText)
{
    try
    {
        var stringReader = new System.IO.StringReader(xmlText);
        var serializer = new XmlSerializer(typeof(T));
        return (T)serializer.Deserialize(stringReader);
    }
    catch
    {
        throw;
    }
}

эти методы теперь могут быть помещены в статический вспомогательный класс, что означает отсутствие дублирования кода для каждого класса, который должен быть сериализован.

    public static string Serialize(object dataToSerialize)
    {
        if(dataToSerialize==null) return null;

        using (StringWriter stringwriter = new System.IO.StringWriter())
        {
            var serializer = new XmlSerializer(dataToSerialize.GetType());
            serializer.Serialize(stringwriter, dataToSerialize);
            return stringwriter.ToString();
        }
    }

    public static T Deserialize<T>(string xmlText)
    {
        if(String.IsNullOrWhiteSpace(xmlText)) return default(T);

        using (StringReader stringReader = new System.IO.StringReader(xmlText))
        {
            var serializer = new XmlSerializer(typeof(T));
            return (T)serializer.Deserialize(stringReader);
        }
    }