自定义XmlSerialize输出

时间:2014-01-29 15:09:43

标签: c# xmlserializer

我正在使用xmlserialize类创建一个xml文件,我得到的输出几乎就是我需要的。 这就是我得到的

<?xml version="1.0" encoding="UTF-8"?>
 <pdf file-name="C:\Users\d.sassoli\Desktop\media\mergiato.pdf" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <document>
  <document start-page="1">
   <SheetChange>
     <SheetChange sheet-type="A4" page-number="1"/>
     <SheetChange sheet-type="A3" page-number="2"/>
    </SheetChange>
 </document>
</pdf>

这就是我想要的

 <?xml version="1.0" encoding="UTF-8"?>
 <root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <pdf file-name="C:\Users\d.sassoli\Desktop\media\mergiato.pdf" >
  <document start-page="1">
     <SheetChange sheet-type="A4" page-number="1"/>
     <SheetChange sheet-type="A3" page-number="2"/>
</pdf>

这些是我的类,我定义了我的xml的结构

   [XmlRootAttribute("pdf", IsNullable = false)]
public class Pdf
{
    private Pdf() { }
    public static Pdf Builder()
    {
        Pdf pdf = new Pdf();
        return pdf;
    }
    [XmlAttribute("file-name")]
    public List<string> FileName { get; set; }
    public List<document> document;

}
public class document 
{

    private document() { }
    public static document Builder()
    {
        document doc = new document();
        return doc;
    }
    [XmlAttribute("last-page")] public string LastPage;
    [XmlAttribute("start-page")] public string StartPage;
    public List<SheetChange> SheetChange;

}
public class SheetChange
{
    private SheetChange() { }
    public static SheetChange Builder()
    {
        SheetChange sheetChange = new SheetChange();
        return sheetChange;
    }
    [XmlAttribute("page-number")]
    public string PageNumber { get; set; }
    [XmlAttribute("sheet-type")]
    public string SheetType { get; set; }
}

我尝试摆弄xmlattribute,但没达到我想要的效果。

1 个答案:

答案 0 :(得分:0)

您需要为您的班级实施IXMLSerializable界面。然后重写ReadXML和WriteXML方法。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable(v=vs.110).aspx

您可以找到使用这些方法的一些示例。