我偶然发现了http://www.sharpserializer.com/en/index.html,但不幸的是,它产生的XML输出格式有点奇怪,这使得它不适合跨平台通信。
我厌倦了标准的.NET XML序列化程序,所以我正在寻找替代方案。
具体来说,我希望它与Newtonsoft.Json序列化程序一样强大,当然也适用于XML。
感谢。
修改
标准.NET XML序列化程序存在两个问题:
是的,您可以通过定义代理成员及其所有方法来解决问题。为什么我们在进行json序列化时没有遇到Newtonsoft.Json的任何问题?
答案 0 :(得分:1)
您希望在类上实现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
答案 1 :(得分:0)
查看DataContract Serializer - WCF在内部使用它来序列化/反序列化SOAP-ed对象。
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());
}