Альтернатива стандартному сериализатору .NET XML, подходит для межплатформенного взаимодействия - PullRequest
0 голосов
/ 20 сентября 2011

Я наткнулся на http://www.sharpserializer.com/en/index.html,, но, к сожалению, вывод XML, который он производит, отформатирован несколько своеобразно, что делает его непригодным для кросс-платформенного взаимодействия.

Мне надоелостандартный XML-сериализатор .NET, поэтому я ищу альтернативу.

В частности, я хотел бы, чтобы он был таким же мощным, как сериализатор Newtonsoft.Json, но, конечно, для XML.

Спасибо.

РЕДАКТИРОВАТЬ

У стандартного сериализатора XML .NET есть две проблемы:

  • Сериализация словаря - это боль вa * s
  • Сериализация TimeSpan является проблемой в a * s

Да, вы можете обойти это, определив прокси-членов и все такое.Почему у нас нет проблем с Newtonsoft.Json при сериализации json?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Вы хотите реализовать IXmlSerializable в своем классе, для этого потребуется добавить 3 метода: 1) ReadXml 2) WriteXml 3) GetSchema

Здесь вы можете указать, как именно ваши файлы сериализуются и десериализуются.

using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;


public class Person : IXmlSerializable
{

    // Private state

    private string personName;


    // Constructors

    public Person (string name)
    {
        personName = name;
    }

    public Person ()
    {
        personName = null;
    }


    // Xml Serialization Infrastructure

    public void WriteXml (XmlWriter writer)
    {
        writer.WriteString(personName);
    }

    public void ReadXml (XmlReader reader)
    {
        personName = reader.ReadString();
    }

    public XmlSchema GetSchema()
    {
        return(null);
    }


    // Print

    public override string ToString()
    {
        return(personName);
    }

}

Вот ссылка на документы.http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

0 голосов
/ 20 сентября 2011

Ознакомьтесь с DataContract Serializer - он используется WCF внутри для сериализации / десериализации SOAP-объектов.

using System.Runtime.Serialization;

/// <summary>
/// Returns object serialized as an XML string by using DataContractSerializer
/// </summary>
/// <returns></returns>
public override string ToString()
{
    DataContractSerializer serializer = new DataContractSerializer(this.GetType());
    System.IO.MemoryStream stream = new System.IO.MemoryStream();
    serializer.WriteObject(stream, this);
    return System.Text.Encoding.ASCII.GetString(stream.ToArray());
}
...