代码之家  ›  专栏  ›  技术社区  ›  Pierre-Alain Vigeant

重写在数据集设计器类中定义的xmlroot属性

  •  2
  • Pierre-Alain Vigeant  · 技术社区  · 15 年前

    我有一个名为document dataset的数据集和一个名为document的类。

    当数据集被序列化时,我需要它的根名为“document”,因为我正在与第三方WebService通信。

    我虽然定义了属性 XmlRoot 在数据集的分部类中,但无法添加xmlRoot的副本,因为它已在设计器类中定义。

    [global::System.Xml.Serialization.XmlRootAttribute("DocumentDataSet")]
    public partial class DocumentDataSet : global::System.Data.DataSet { ... }
    

    我可以在Designer类中更改它,但每次我在Design中打开数据集时,它都会被重置。

    有什么方法可以替代吗 XMLROOT 或者让它用一个与其类名不同的名称进行序列化?

    1 回复  |  直到 15 年前
        1
  •  2
  •   João Angelo    15 年前

    你可以使用 XmlSerializer constructor 接受一个 XmlRootAttribute 它表示要使用的XML根元素。

    new XmlSerializer(typeof(DocumentDataSet), new XmlRootAttribute("Document"));
    

    也可以这样做:

    class DocumentDataSet : DataSet
    {
        public new string GetXml()
        {
            return base.GetXml().Replace("DocumentDataSet ", "Document");
        }
    }
    

    如果你最终采用这种方法 Replace 还不够,但这只是为了说明问题。还应注意,如果您通过基类引用文档数据集实例 DataSet 最后一种方法行不通。

    DataSet ds = new DocumentDataSet();
    
    ds.GetXml(); // Wrong