Сериализация объекта в XML - PullRequest
250 голосов
/ 08 ноября 2010

У меня есть класс C #, который я унаследовал.Я успешно "построил" объект.Но мне нужно сериализовать объект в XML.Есть ли простой способ сделать это?

Похоже, класс был настроен для сериализации, но я не уверен, как получить представление XML.Мое определение класса выглядит следующим образом:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.domain.com/test")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.domain.com/test", IsNullable = false)]
public partial class MyObject
{
  ...
}

Вот то, что я думал, что мог бы сделать, но оно не работает:

MyObject o = new MyObject();
// Set o properties
string xml = o.ToString();

Как мне получить представление XML этогообъект

Ответы [ 15 ]

2 голосов
/ 01 сентября 2017

мой рабочий код. Возвращает utf8 xml включить пустое пространство имен.

// override StringWriter
public class Utf8StringWriter : StringWriter
{
    public override Encoding Encoding => Encoding.UTF8;
}

private string GenerateXmlResponse(Object obj)
{    
    Type t = obj.GetType();

    var xml = "";

    using (StringWriter sww = new Utf8StringWriter())
    {
        using (XmlWriter writer = XmlWriter.Create(sww))
        {
            var ns = new XmlSerializerNamespaces();
            // add empty namespace
            ns.Add("", "");
            XmlSerializer xsSubmit = new XmlSerializer(t);
            xsSubmit.Serialize(writer, obj, ns);
            xml = sww.ToString(); // Your XML
        }
    }
    return xml;
}

Пример возврата ответа яндекс api платеж Aviso url:

<?xml version="1.0" encoding="utf-8"?><paymentAvisoResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" performedDatetime="2017-09-01T16:22:08.9747654+07:00" code="0" shopId="54321" invoiceId="12345" orderSumAmount="10643" />
2 голосов
/ 14 июня 2016
    string FilePath = ConfigurationReader.FileLocation;   //Getting path value from web.config            
    XmlSerializer serializer = new XmlSerializer(typeof(Devices)); //typeof(object)
            MemoryStream memStream = new MemoryStream();
            serializer.Serialize(memStream, lstDevices);//lstdevices : I take result as a list.
            FileStream file = new FileStream(folderName + "\\Data.xml", FileMode.Create, FileAccess.ReadWrite); //foldername:Specify the path to store the xml file
            memStream.WriteTo(file);
            file.Close();

Вы можете создать и сохранить результат в виде XML-файла в нужном месте.

1 голос
/ 25 января 2019

У меня есть простой способ сериализации объекта в XML с использованием C #, он прекрасно работает и его можно многократно использовать. Я знаю, что это старая ветка, но я хотел опубликовать это, потому что кто-то может найти это полезным для них.

Вот как я называю метод:

var objectToSerialize = new MyObject();
var xmlString = objectToSerialize.ToXmlString();

Вот класс, который делает работу:

Примечание. Поскольку это методы расширения, они должны находиться в статическом классе.

using System.IO;
using System.Xml.Serialization;

public static class XmlTools
{
    public static string ToXmlString<T>(this T input)
    {
        using (var writer = new StringWriter())
        {
            input.ToXml(writer);
            return writer.ToString();
        }
    }

    private static void ToXml<T>(this T objectToSerialize, StringWriter writer)
    {
        new XmlSerializer(typeof(T)).Serialize(writer, objectToSerialize);
    }
}
0 голосов
/ 06 февраля 2018

Вот базовый код, который поможет сериализовать объекты C # в xml:

using System;

public class clsPerson
{
  public  string FirstName;
  public  string MI;
  public  string LastName;
}

class class1
{ 
   static void Main(string[] args)
   {
      clsPerson p=new clsPerson();
      p.FirstName = "Jeff";
      p.MI = "A";
      p.LastName = "Price";
      System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
      x.Serialize(Console.Out, p);
      Console.WriteLine();
      Console.ReadLine();
   }
}    
0 голосов
/ 25 апреля 2015

Или вы можете добавить этот метод к вашему объекту:

    public void Save(string filename)
    {
        var ser = new XmlSerializer(this.GetType());
        using (var stream = new FileStream(filename, FileMode.Create))
            ser.Serialize(stream, this);
    }
...