我想序列化一个c#类,但我不想把这些属性放在类上。 我在codeplex上发现了FluentXML,但它似乎只是一个想法项目而且无论如何都无法正常工作
答案 0 :(得分:2)
这是一个适合我的例子。来自Serialize object to string
我只是用Google搜索“将类序列化为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; }
}
答案 1 :(得分:1)
为了使用XmlSerializer
,没有什么可以强迫你在你的班级上放置属性。在这种情况下,生成的XML将简单地反映您的对象结构。另一方面,如果您想控制生成的XML,则可以使用XmlWriter
或XDocument
代替。但是属性是为此目的而设计的,您应该使用它们。如果由于某种原因你不能修改你正在序列化的类(因为你没有它的源代码)你总是可以设计一个不同的类,你可以用属性装饰,然后将原始类映射到这个模型,你将序列化。
答案 2 :(得分:1)
您可以使用没有属性的XmlSerializer
并使用它为您提供的默认名称,或者您也可以在班级上实现IXmlSerializable
界面,以获得更加自定义但手动输出,而无需使用属性。
答案 3 :(得分:0)
假设您有充分的理由不使用属性,可以使用XmlSerializer
,但要注意它只适用于公共成员,还需要公共类型和无参数构造函数。