xsd2code - проблема десериализации XML-файла - PullRequest
3 голосов
/ 19 апреля 2011

В прошлом я создавал собственный класс сериализации xml вручную.Но сейчас я хотел бы сделать это автоматически.Итак, я нашел инструмент XSD от Microsoft.К сожалению, я сталкиваюсь с ошибкой в ​​этой утилите (CS030 и т. Д.).Но затем я нашел отличный инструмент с открытым исходным кодом XSD2CODE http://xsd2code.codeplex.com/

Все выглядело прекрасно, пока я не заметил, что не все мои данные XML были десериализованы (смеется).

Мой XML:

<?xml version="1.0" encoding="utf-8" ?>
<MySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <AdminPassword>Admn1234</AdminPassword>
        <ImagesFolder></ImagesFolder>
    <Resolutions>
        <Resolution id="1024x768">
            <Width>1024</Width>
            <Height>768</Height>
            <Panel id="top">
                <Height>603</Height>
                <LocationOnMainForm>
                    <X>0</X>
                    <Y>0</Y>
                </LocationOnMainForm>
                <Background>1_panel_top_background.jpg</Background>
                <Buttons>
                    <Button id="pbMainTopComp">
                        <Background>panel_top_btn_info.jpg</Background>
                        <Location>
                            <X>27</X>
                            <Y>123</Y>
                        </Location>
                        <OnClickOpenLink>http://www.google.com</OnClickOpenLink>
                    </Button>
                    <Button id="pbMainTopSelf">
                        <Background>panel_top_btn_self.jpg</Background>
                        <Location>
                            <X>360</X>
                            <Y>123</Y>
                        </Location>
                        <OnClickOpenLink>http://www.yahoo.com</OnClickOpenLink>
                    </Button>
                </Buttons>
            </Panel>
            <Panel id="bottom">
                <LocationOnMainForm>
                    <X>0</X>
                    <Y>603</Y>
                </LocationOnMainForm>
                <Height>165</Height>
                <Background>panel_bottom_background.jpg</Background>
                <Buttons>
                    <Button id="pbMainBottomPages">
                        <Background>panel_bottom_btn_pages.jpg</Background>
                        <Location>
                            <X>38</X>
                            <Y>39</Y>
                        </Location>
                        <OnClickOpenLink/>
                    </Button>
                    <Button id="pbMainBottomReport">
                        <Background>panel_bottom_btn_report.jpg</Background>
                        <Location>
                            <X>344</X>
                            <Y>39</Y>
                        </Location>
                        <OnClickOpenLink>http://www.bing.com</OnClickOpenLink>
                    </Button>
                </Buttons>
            </Panel>
        </Resolution>
    </Resolutions>
</MySettings>

Когда я использую стандартный метод для десериализации, у меня возникает ошибка.

 MySettings mySettings = new MySettings();

using (TextReader textReader = new StreamReader(@"settings_test.xml"))
        {
            XmlSerializer xSerializer = new XmlSerializer(typeof(MySettings));
            mySettings = (MySettings)xSerializer.Deserialize(textReader);
        }

Когда я использую встроенный метод десериализации Xsd2Code:

    MySettings mySettings = new MySettings();

    bool isOk = MySettings.LoadFromFile(@"settings_test.xml", out mySettings);

    string pass = mySettings.AdminPassword;


    foreach (MySettingsResolutionsResolution item in mySettings.Resolutions)
    {
        string height = item.Height;

        foreach (MySettingsResolutionsResolutionPanel panel in item.Panel)
        {
            string bckg = panel.Background;

            foreach (MySettingsResolutionsResolutionPanelButtonsButton btn in panel.Buttons)
            {
                string btnBckg = btn.Background;
            }
        }
    }

, тогда у меня нет ошибокно не все данные десериализованы из XML.Например: Empty properties

Мои настройки Xsd2Code: Xsd2Code my settings

Может кто-нибудь посоветовать мне:

  • Что я сделал не так и как это исправить?
  • или
  • Предложите другое автоматизированное рабочее решение для моего XML (над XML).

Заранее большое спасибо за все предложения.

Ответы [ 2 ]

0 голосов
/ 08 августа 2013

В этой ситуации может возникнуть несколько проблем:

  1. Неправильный порядок элементов в вашем xml внутри блока, тогда, если вы на самом деле не заботитесь о порядке, просто замените его на элемент в xsd (он удалит атрибут XmlElementAttribute из сгенерированного кода из ответа KenE).
  2. Или более простой случай - ошибка в xml, например, добавление к существующему элементу (xsd2code не потерпит неудачу при десалинизации, но проигнорирует элемент)

Надеюсь, это поможет

0 голосов
/ 14 марта 2013

В моем случае это было добавление параметров заказа к XmlElementAttribute (то есть Order = 4).

Если вы удалите параметр порядка, он работает просто отлично.То, что я не могу найти, - это способ запретить XSD2CODE включать параметр порядка при создании класса.

...