1

我想序列化 ac# 类,但我不想将属性放在类上。我在 codeplex 上找到了 FluentXML,但它似乎只是一个创意项目,无论如何都无法正常工作

4

4 回答 4

2

这是一个对我有用的例子。从序列化对象到字符串

我只是用谷歌搜索“将类序列化为 xml 字符串”

String XmlizedString = null;

XmlSerializer x = new XmlSerializer(objectNameHere.GetType());

MemoryStream memoryStream = new MemoryStream();

XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);

x.Serialize(xmlTextWriter, objectNameHere);

memoryStream = (MemoryStream)xmlTextWriter.BaseStream;

UTF8Encoding encoding = new UTF8Encoding();

XmlizedString = encoding.GetString(memoryStream.ToArray());

XmlizedString = XmlizedString.Substring(1);

它产生了这样的字符串 <?xml version="1.0" encoding="utf-8"?><Employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Name>StackOverflow User</Name><Title>User of StackOverflow.</Title><Salary>70000</Salary><Skills><string>Being Awesome</string><string>Being sweet</string></Skills></Employee>

从一个像这样简单的 Employee 类:

public class Employee
{
  public string Name { get; set; }
  public string Title { get; set; }
  public double Salary { get; set; }
  public Collection<string> Skills { get; set; }
}
于 2013-03-01T22:01:29.553 回答
1

没有什么会强迫您将属性放在您的类上以便使用XmlSerializer. 在这种情况下,生成的 XML 将简单地反映您的对象结构。另一方面,如果您想控制生成的 XML,您可以使用 aXmlWriter或 anXDocument来代替。但是这些属性正是为此目的而设计的,您应该使用它们。如果由于某种原因您无法修改您正在序列化的类(例如,因为您没有它的源代码),您总是可以设计一个不同的类,您可以用属性装饰它,然后将原始类映射到您的模型会序列化。

于 2013-03-01T21:53:30.427 回答
1

您可以使用XmlSerializer无属性并使用它为您提供的默认名称,或者您也可以IXmlSerializable在您的类上实现接口以获得更自定义但手动的输出,而无需使用属性。

于 2013-03-01T21:54:46.577 回答
0

假设您有充分的理由不使用属性,则可以使用XmlSerializer,但请注意它仅适用于公共成员,并且还需要公共类型和无参数构造函数。

于 2013-03-01T21:52:48.300 回答