C#中的XML元素元素/属性注释

时间:2015-12-30 20:51:48

标签: c# xml annotations

是否可以通过xml注释获取元素(子)元素或元素自己的属性而不使用幻像类?

示例当前代码snipet: XML:

<root>
    ...
    <epno type="1">12</epno>
    ...
</root>

C#类:

[XmlRoot("root")]
class Root {
    ...
    [XmlElement("epno")]
    public Epno epno;
    ...
}

class Epno { //"Phantom" class
    [XmlAttribute("type")]
    public int type;
    [XmlText]
    public int epno;
}

我想要的是删除那个Epno类并将这些道具移动到Root类......

[XmlRoot("root")]
class Root {
    ...
    [XmlElement("epno")]
    [XmlAttribute("type")] // I need a solution for this...
    public int type;
    [XmlElement("epno")]
    public int epno;
    ...
}

另外还有另一个地方,在哪里是加号,我想得到一个元素的属性,这是另一个元素...比我想得到元素的元素值。< / p>

对于这个Xml示例:

<root>
    <rates>
        <permanent votes="100">6.54</permanent>
        <temprate votes="100">6.54</temprate>
    </rates>
</root>

这里我想将这些值放入根类中,但在这种情况下,需要最少2个类来解析它。

那么,有没有一种方法可以在没有这些幻像类的情况下通过注释对这些类进行反序列化,而无需编写自己的xml解析器?

2 个答案:

答案 0 :(得分:0)

通过使用 only XML序列化属性,无法获取根类的“一个子元素及其属性”并在XML序列化期间将这些元素转换为其根类的元素。

但是,你可以通过以下方式达到预期的效果:

答案 1 :(得分:0)

我认为您正在寻找的是XmlDocument。

这是你的第二项任务:

XmlDocument xDoc = new XmlDocument();

xDoc.LoadXml("<root><rates> <permanent votes = \"100\" > 6.54 </permanent>  <temprate votes = \"100\" > 6.54 </temprate></rates> </root> ");

// find the nodes we are interested in
XmlNode Rates = xDoc.SelectSingleNode("//rates");
XmlNode Root = xDoc.SelectSingleNode("root");

// We can't modify a collection live so create a temporary list
List<XmlNode> TempList = new List<XmlNode>();

foreach (XmlNode Node in Rates.ChildNodes)
{
    TempList.Add(Node);          
}

// remove the nodes and their container node
foreach (XmlNode Node in TempList)
{
    Node.ParentNode.RemoveChild(Node);
}
// Use this to remove the parent and children
// in one step
// Rates.ParentNode.RemoveChild(Rates); 

// insert in desired location
foreach (XmlNode Node in TempList)
{
    Root.AppendChild(Node);
}

// Hope this works!
xDoc.Save("C:\\test.xml");