C# 混淆我应该将函数分配给哪个对象
我有以下两个类将对象转换为xml字符串 我应该做类似的事情吗C# 混淆我应该将函数分配给哪个对象,c#,oop,C#,Oop,我有以下两个类将对象转换为xml字符串 我应该做类似的事情吗 class Person { public string GetXml() { //return a xml string } } class PersonSerializer { public string Serialize(Person person) { // return a xml string } } 或
class Person
{
public string GetXml()
{
//return a xml string
}
}
class PersonSerializer
{
public string Serialize(Person person)
{
// return a xml string
}
}
或者最好创建另一个接受person作为参数的类
并将其转换为XML,如
class Person
{
public string GetXml()
{
//return a xml string
}
}
class PersonSerializer
{
public string Serialize(Person person)
{
// return a xml string
}
}
谢谢一般来说,
Serialize
方法应该在您想要序列化的类上;这样,它可以访问其他类无法访问的所有私有成员变量,并且通常可以更高效地执行操作。您可以创建可以序列化不同对象/类的通用序列化程序。
让你的类保持简单,做它应该做的事情。序列化不是一个人应该做的事情。要问的问题是:一个人对XML了解多少 答案是:没有
因此,第三次投票选择一个单独的序列化程序。要完成,您应该使用
IXmlSerializable
接口。即:
class Person : IXmlSerializable
{
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
// Provide Schema
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
// Read XML into Object
}
public void WriteXml(System.Xml.XmlWriter writer)
{
// Write XML here
}
#endregion
// Added as example to what I have said below
public override string ToString()
{
// Make XML String
return "XML STRING";
}
}
针对您对TomTom的评论:
是的,我同意,但我在.net类本身上看到了类似的例子:int int1=1;int1.ToString()
您在这里看到的是重写
ToString()
方法。我更新了上面的代码来说明它的用法。在.NET中已经有一种用于XML序列化对象的机制,请查看有关属性的详细信息,这些属性可用于声明性地标记要序列化的类的各个方面
您最初的问题实际上是询问是将序列化信息嵌入到它所属的类中,还是将其放置到一个单独但关联的类中。第一种方法的优点是序列化代码能够直接访问私有成员,并且与类紧密耦合。缺点是序列化代码会影响类的实际逻辑-如果您也添加二进制序列化,这一点会更加明显
NET中实际上有一种称为序列化代理的机制,用于将序列化逻辑分离到单独的类中。有关详细信息,请参阅。.NET XmlSerializer可以序列化任何类型。序列化的元素都是pulic读/写属性。因此,PersonXmlSerializer已经存在;-) 是的,我同意,但我在.net类本身上看到了类似的例子:int int1=1;int1.ToString();我不认为单独上课是个好主意。他使用它只序列化Person对象。因此,我认为,对象本身应该知道如何序列化自身。ToString被视为一个低级项,它来自system.object,也是调试器中的默认字符串表示形式。妥协@好答案。悲哀地主题仍然错误。解析呢?;)这就是为什么要使用ISerializable和.NET serialization framework-以独立于格式的方式指定要反序列化的数据:)内置的.NET XmlSerializer很有用,但是它有一些限制,例如,如果要序列化链接的任何类上有任何接口,它将返回错误