2010-03-19 98 views
2

我有以下两类其将对象转换成XML字符串搞不清哪些对象应该我来分配功能来

,我应该这样做

class Person 
{ 

    public string GetXml() 
    { 
     //return a xml string 
    } 
} 

,或者它是最好创建另一个类接受个人作为参数 并将其转换成XML类似

class PersonSerializer 
{   
    public string Serialize(Person person) 
    { 
      // return a xml string 
    } 

} 

感谢

回答

2

通常,Serialize方法应位于要序列化的类上;这样,它可以访问其他类无法访问的所有私有成员变量,并且通常更高效地执行操作。

0

第二个选项。您可以创建一个可以序列化不同对象/类的通用序列化程序。 保持你的课程只是简单的,做它应该做的。序列化不是一个人应该做的事。

3

要问的问题:一个人对XML有什么了解?

答案是:没有什么

因此,第三投给一个单独的序列化。

+0

是的我同意,但我已经看到了类似的东西。净类本身 例如: int int1 = 1; int1.ToString(); – CliffC

+0

我不认为制作一个单独的课程会是一个好主意。他正在使用它来序列化Person对象。所以,我认为,对象本身应该知道如何序列化自己。 – ata

+0

ToString被视为低级别项目,它来自system.object并且也是调试器中的默认字符串表示形式。妥协。 @ comerback84 - 很好的答案。可悲的是...仍然是主题错误。怎么样分析?;) – TomTom

0

要完成,您应该使用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()方法。我更新了上面的代码来说明它的用法。

1

.NET中已经有了一个用于对象的XML序列化的机制,请查看this article以获取有关可用于声明性标记要序列化的类的各个方面的属性的详细信息。

您的原始问题实际上是询问是否将序列化信息嵌入到它所属的类中,或将其放入单独的相关类中。第一种方法的优点是序列化代码能够直接访问私有成员,并且与类紧密结合。缺点是序列化代码覆盖了类的实际逻辑 - 如果您也添加了二进制序列化,这会变得更加明显。

在.NET中,实际上有一种称为序列化代理的机制,用于将序列化逻辑分离为单独的类。详情请参阅part 3 of this article

0

.NET XmlSerializer可以序列化任何类型。序列化的元素都是pulic读/写属性。因此,PersonXmlSerializer已经存在;-)

+0

在.net XmlSerializer的构建是有用但是例如存在于它的一些限制它会返回一个错误,如果有任何你想要序列化的类的任何接口 – CliffC

+0

@CliffC:真的......?你介意给我一个例子吗? – Seb

+1

链接发出http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx – CliffC

相关问题