powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DeSerialize пустого узла XML
10 сообщений из 10, страница 1 из 1
DeSerialize пустого узла XML
    #38904442
Wizard2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, пробую провести DeSerialize объекта из XML в котором может присутствовать пустой узел который записан как
Код: xml
1.
<element /> 

при загрузке данных выдается ошибка
"В документе XML (205, 22) присутствует ошибка."
Поле куда загружается этот элемент
Код: c#
1.
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]


Пробую добавить еще
Код: c#
1.
[System.Xml.Serialization.XmlElement(IsNullable = true)]


Выдает просто произошла какая то ошибка при загрузке данных.
Как можно побороть подобную XML?


В мире где каждый второй гений было бы страшно жить, поэтому я живу без страха.
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38904446
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizard2007, гляньте на пример как это можно решить одним из способов:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[XmlRoot(ElementName = "a")]
public class A
{
    [XmlElement(ElementName = "b")]
    public int? B { get; set; }

    [XmlElement(ElementName = "c")]
    public string _c { get; set; }

    public int? C
    {
        get
        {
            int retval;

            return !string.IsNullOrWhiteSpace(_c) && int.TryParse(_c, out retval) ? (int?) retval : null;
        }
    }
}
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38904601
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizard2007,

не очень понятно, с чем связана ошибка, так как не видно ни самой XML, не классов в которые осуществляется десереилизация.
Скажу лишь одно, что если открыть Exception и почитать его содержимое, там будет указана более точно ошибка от десериализатора.
Если проблема в поле с структурой типа int, bool, то тут есть 2 пути, делать 1 поле XmlIgnore и оборачивать его другим, либо
вот таким образом
Код: c#
1.
2.
3.
[XmlElement("SomeBoolean ", Namespace = "SomeNamespace")]
public bool? SomeBoolean { get; set; }
public bool ShouldSerializeSomeBoolean() { return SomeBoolean.HasValue; }


создается поле с приставкой ShouldSerialize в нем задается существование значения.
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38906513
Wizard2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

Да видимо я сглупил когда не приложил файлы тут XSD
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38906514
Wizard2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

тут CS
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38906515
Wizard2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

тут CS
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38906516
Wizard2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

тут XML
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38906834
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizard2007
Код: c#
1.
System.Xml.Serialization.XmlElementAttribute(IsNullable = true)


Насколько я помню, IsNullable означает лишь возможность присваивания значения xsi:nil="true"

Что то я не вижу в схеме возможности присутствия в документе пустого <element />
...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38906943
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wizard2007,

Вот какие изменения нужны в order.cs:


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
    /// <remarks/>
    //[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
    [XmlIgnore]
    public System.Nullable<decimal> QUANTITYOFCUINTU
    {
        get
        {
            return this.qUANTITYOFCUINTUField;
        }
        set
        {
            this.qUANTITYOFCUINTUField = value;
        }
    }

    [XmlAttribute("QUANTITYOFCUINTU")]
    public string QUANTITYOFCUINTUstring
    {
        get
        {
            return QUANTITYOFCUINTU.HasValue
            ? XmlConvert.ToString(QUANTITYOFCUINTU.Value)
            : string.Empty;
        }
        set
        {
            QUANTITYOFCUINTU =
            !string.IsNullOrEmpty(value)
            ? XmlConvert.ToDecimal(value)
            : (decimal?)null;
        }
    }

...
Рейтинг: 0 / 0
DeSerialize пустого узла XML
    #38908641
Wizard2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Спасибо помогло. Только для тех кто захочет попробовать на исходных файлах протестировать надо будет писать не
Код: c#
1.
2.
    [XmlAttribute("QUANTITYOFCUINTU")]
    public string QUANTITYOFCUINTUstring



Код: c#
1.
2.
    [XmlElement("QUANTITYOFCUINTU")]
    public string QUANTITYOFCUINTUstring



иначе данные не правильно забираются из XML и будут во всех случаях NULL
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DeSerialize пустого узла XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]