Класс XML для разбора - PullRequest
2 голосов
/ 13 марта 2012

У меня есть модель класса для структуры XML, где я хочу разобрать xml в нее. Я использовал генератор XSD. Все будет хорошо, но две вещи не работают.

Первое: у меня есть что-то подобное в xml:

<protocol>

<!-- an error message which may appear from both sides as a response anytime.-->
<message type="error">
some string
</message>

...
</protocol>

У моего набора классов, который я получил от генератора xsd, в моем классе сообщений нет полей, где я мог бы получить эту строку. Какой атрибут мне нужно назначить полю, которое я создаю в этом классе: (строковое сообщение) для получения этого значения?

Второе: у меня что-то подобное в xml:

<message type="gameState">
<gameId id="zxcc"/>
<!-- one tag of the two below appears in message -->
<nextPlayer nick="asdd"/>
<gameOver>
<!-- this tag appears repeatedly for all the players -->
<player nick="zxc" result="winner"/>
</gameOver>
<!-- this tag will always appear. Not read by the server.-->
<gameState>
</gameState>
</message>

И генератор создать в классе сообщений это для gameOver:

/// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute("gameOver", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    [System.Xml.Serialization.XmlArrayItemAttribute("player", typeof(player), IsNullable=false)]
    public player[][] gameOver {
        get {
            return this.gameOverField;
        }
        set {
            this.gameOverField = value;
        }
    }

И я получаю исключение:

Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'player[]' to 'player'
error CS0029: Cannot implicitly convert type 'player' to 'player[]'

игрок - это класс, определенный генератором, он работает с другими атрибутами. Я считаю, что этот фрагмент XML является только сложным узлом, где у меня есть 3 степени.

Как я могу это исправить?

1 Ответ

0 голосов
/ 15 марта 2012

Хорошо.Я нашел решение для моей первой проблемы.

Мне пришлось добавить

[XmlText]
public string Value { get; set; }

к моему классу сообщений для сериализации в него текста в пределах <message></message>, но я не могу найти решение для второйпроблема.Какие-нибудь мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...