Класс в XML в C # - PullRequest
       8

Класс в XML в C #

2 голосов
/ 16 февраля 2011

У меня есть класс C # следующим образом:

class CoverageInfo {
    public string className;
    public int blocksCovered;
    public int blocksNotCovered;

    public CoverageInfo(string className, int blocksCovered, int blocksNotCovered) 
    {
        this.className = className;
        this.blocksCovered = blocksCovered;
        this.blocksNotCovered = blocksNotCovered;
    }
}

И у меня есть переменная List, ModuleName, BlocksCovered / BlocksNotCovered.Из этой информации мне нужно создать XML-файл следующим образом.

<Coverage>
  <Module>
    <ModuleName>hello.exe</ModuleName>
    <BlocksCovered>5</BlocksCovered>
    <BlocksNotCovered>5</BlocksNotCovered>
    <Class>
       <ClassName>Fpga::hello</ClassName>
       <BlockCovered>5</BlocksCovered>
       <BlocksNotCovered>2</BlocksNotCovered>
    </Class>
    <Class>
        ...
    </Class>
  </Totalcoverage>
</Coverage>

Как я могу сделать это с C #?

Ответы [ 3 ]

3 голосов
/ 16 февраля 2011

В таком простом случае я бы использовал XmlSerializer с атрибутами сериализации XML.

Хороший учебник предоставляется здесь:

http://www.codeproject.com/KB/XML/GameCatalog.aspx

Я бы настоятельно рекомендовал вам использовать свойства вместо членов, так как вы будете более гибкими в реализации хуков или разграничите права доступа get / set в будущем. (Однако последний должен оставаться открытым, если вы все еще хотите использовать атрибуты XML или вам придется переключиться на реализацию IXmlSerializable.)

Код в вашем случае будет выглядеть так:

class CoverageInfo {
    [XmlElement("ClassName")]
    public string className;
    [XmlElement("BlockCovered")]
    public int blocksCovered;
    [XmlElement("BlocksNotCovered")]
    public int blocksNotCovered;

    ....
}

Затем работа выполняется XmlSerializer

1 голос
/ 16 февраля 2011

Полагаю, это может помочь: Вопрос класса XML в C #

0 голосов
/ 16 февраля 2011

Вы можете использовать xsd.exe (поставляется с Visual Studio) для генерации классов из файла xml (если у вас есть файл xsd, было бы еще лучше). Команда:

xsd <path to xsd or xml> /c /o:<path where the cs file is saved>

Затем просто создайте список объектов, которые вы хотите сохранить в формате XML, и сделайте что-то похожее на это:

GetEntityXml(coverageInfo).Save(@"D:\out.xml");

, где покрытиеInfo равно List<CoverageInfo>, а GetEntityXml 1 равно:

public XmlDocument GetEntityXml<T>(List<T> listToSave)
{
    XmlDocument xmlDoc = new XmlDocument();
    XPathNavigator nav = xmlDoc.CreateNavigator();
    using (XmlWriter writer = nav.AppendChild())
    {
        XmlSerializer ser = new XmlSerializer(typeof(List<T>), new XmlRootAttribute("Whatever you need"));
        ser.Serialize(writer, listToSave);
    }
    return xmlDoc;
}

1 Кредит , причитающийся кредит.

...