powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / XML сериализация
2 сообщений из 2, страница 1 из 1
XML сериализация
    #38593201
wizzzi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется абстрактный класс CatalogItem, у него 3 наследника:BookCatalogItem, NewspaperCatalogItem, PattentCatalogItem.
Необходимо сериализовать следующий к класс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
[XmlInclude(typeof(BookCatalogItem))]
    [XmlInclude(typeof(NewspaperCatalogItem))]
    [XmlInclude(typeof(PattentCatalogItem))]
    [XmlRoot("Catalog", Namespace="https://Kashin/CatalogSchema.xsd")]
    [XmlInclude(typeof(CatalogItem))] 
    public class CatalogList: List<CatalogItem>
    {
    }



Сериализую уего следующим образом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
     CatalogList cl = new CatalogList();
            cl.Add(new BookCatalogItem("AAAA1", "BBBB", "CCC", "DDDD", DateTime.Now, 10, "dddd", "789-1-12-123456-1"));
            cl.Add(new PattentCatalogItem("dasd", "asdq", "Russia", 29, DateTime.Now.Date, DateTime.Now, 20, "dsada"));
            cl.Add(new BookCatalogItem("AAAA", "BBBB", "CCC", "DDDD", DateTime.Now.Date, 10, "dddd", "789-1-12-123456-3"));
 
            XmlSerializer xs = new XmlSerializer(typeof(CatalogList));
            using (StreamWriter s = new StreamWriter("catalog.xml"))
                xs.Serialize(s, cl);



На выходе получаю:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?xml version="1.0" encoding="utf-8"?>
<Catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="https://Kashin/CatalogSchema.xsd">
  <CatalogItem xsi:type="Book">
    <Title>AAAA1</Title>
    <Page>10</Page>
    <Author>BBBB</Author>
    <City>CCC</City>
    <Issue>DDDD</Issue>
    <DateIssue>2014-03-21T09:24:51.4555401+04:00</DateIssue>
    <PS>dddd</PS>
    <ISBN>789-1-12-123456-1</ISBN>
  </CatalogItem>
  <CatalogItem xsi:type="Pattent">
    <Title>dasd</Title>
    <Page>20</Page>
    <Inventor>asdq</Inventor>
    <Country>Russia</Country>
    <Number>29</Number>
    <Date>2014-03-21T00:00:00+04:00</Date>
    <DateIssue>2014-03-21T09:24:51.4565416+04:00</DateIssue>
    <PS>dsada</PS>
  </CatalogItem>
</Catalog>



1. Как можно заменить
Код: xml
1.
<CatalogItem xsi:type="Pattent">


на
Код: xml
1.
<Pattent>


2. Как в XSD схему
Код: xml
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.
33.
34.
35.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="CatalogSchema"
    targetNamespace="https://Kashin/CatalogSchema.xsd"
    elementFormDefault="qualified"
    xmlns="https://Kashin/CatalogSchema.xsd"
    xmlns:mstns="https://Kashin/CatalogSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
  
  <xs:element name="Catalog">    
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="CatalogItem">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Title" type="xs:string"></xs:element>
              <xs:element name="Author" type="xs:string"></xs:element>
              <xs:element name="City" type="xs:string"></xs:element>
              <xs:element name="Issue" type="xs:string"></xs:element>
              <xs:element name="DateIssue" type="xs:date"></xs:element>
              <xs:element name="Page" type="xs:int"></xs:element>
              <xs:element name="PS" type="xs:string"></xs:element>
              <xs:element name="ISBN">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="[7-9]{3}-[0-9]-[0-9]{2}-[0-9]{6}-[0-9]"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>           
          </xs:complexType>
        </xs:element>
....


за место
Код: xml
1.
<xs:element name="CatalogItem">

добавить
Код: xml
1.
<xs:element name="CatalogItem" xsi:type="Book">

.
...
Рейтинг: 0 / 0
XML сериализация
    #38593308
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wizzzi1. Как можно заменить
Код: xml
1.
<CatalogItem xsi:type="Pattent">


на
Код: xml
1.
<Pattent>


По-моему, это невозможно.
xsi:type как раз и предназначено для того, чтобы указывать точный тип наследника, а имя элемента - тип родителя.

wizzzi2. Как в XSD схему
...
за место
Код: xml
1.
<xs:element name="CatalogItem">

добавить
Код: xml
1.
<xs:element name="CatalogItem" xsi:type="Book">


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


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