如何为C#XML序列化添加属性

use*_*779 37 c# xml-serialization

我遇到序列化和对象的问题,我可以让它创建所有正确的输出,除了我有一个需要值和属性的元素.这是必需的输出:

<Root>
  <Method>Retrieve</Method>
  <Options>
    <Filter>
      <Times>
        <TimeFrom>2009-06-17</TimeFrom>
      </Times>
      <Document type="word">document name</Document>
    </Filter>
  </Options>
</AdCourierAPI>
Run Code Online (Sandbox Code Playgroud)

我可以构建所有它但无法找到设置Document类型属性的方法,这里是对象类的一部分

[XmlRoot("Root"), Serializable]    
public class Root    
{    
    [XmlElement("Method")]    
    public string method="RetrieveApplications";    
    [XmlElement("Options")]    
    public _Options Options;    
}    
public class _Options    
{
    [XmlElement("Filter")]    
    public _Filter Filter;    
}
public class _Filter    
{
    [XmlElement("Times")]    
    public _Times Times;    
    [XmlElement("Documents")]    
    public string Documents;    
}
Run Code Online (Sandbox Code Playgroud)

这给了我:

<Document>document name</Document>
Run Code Online (Sandbox Code Playgroud)

而不是:

<Document type="word">document name</Document>
Run Code Online (Sandbox Code Playgroud)

但是我找不到纠正这个的方法,请指教.

谢谢

bru*_*nde 56

你在哪里type存储?

通常你可以有类似的东西:

class Document {
    [XmlAttribute("type")]
    public string Type { get; set; }
    [XmlText]
    public string Name { get; set; }
}


public class _Filter    
{
    [XmlElement("Times")]    
    public _Times Times;    
    [XmlElement("Document")]    
    public Document Document;    
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*que 11

string班没有一个type属性,所以你不能用它来创建所需的输出.你应该创建一个Document类:

public class Document
{
    [XmlText]
    public string Name;

    [XmlAttribute("type")]
    public string Type;
}
Run Code Online (Sandbox Code Playgroud)

您应该更改Document属性以键入Document


Mar*_*ell 8

听起来你需要额外的课程:

public class Document
{
    [XmlAttribute("type")]
    public string Type { get; set; }
    [XmlText]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

实例(在示例中)将具有Type = "word"Name = "document name"; documents会是一个List<Document>.

顺便说一下 - 公共领域很少是个好主意......