Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 12

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

// Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π² список

XmlNodeList nodeLst=doc.SelectNodes("//ProductName");

foreach (XmlNode nd in nodeLst) listBox1.Items.Add(nd.InnerXml);

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² мноТСство DataSet, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

DataSet dsNew = new DataSet();

dsNew.ReadXmlSchema("..\\..\\..\\diffgram.xsd");

dsNew.XmlRead("..\\..\\..\\diffgram.xml", XmlReadMode.DiffGram);

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ мноТСства Π΄Π°Π½Π½Ρ‹Ρ… DataSet, dsNew. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ReadXmlSchema создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DataTable Π½Π° основС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ схСмы. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ»ΠΎΠ½ΠΎΠΌ DataTable ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² DiffGram. DiffGram Π½Π΅ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ схСмС, поэтому Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DataTable Π±Ρ‹Π» создан ΠΈ Π³ΠΎΡ‚ΠΎΠ² ΠΊ использованию Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ReadXml. Π’ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ выглядит DiffGram (diffgram.xml):

<?xml version="1.0" standalone="yes"?>

 <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

  <XMLProducts>

   <products diffgr:id="products1" msdata:rowOrder="0" diffgr:hasChanged="modified">

    <ProductID>1</ProduсtID>

    <ProductName>NewProdName</ProductName>

    <SupplierID>1</SupplierID>

    <CategoryID>1</CategoryID>

    <QuantityPerUnit>10 boxes x 20 bags</QuantityPerUnit>

    <UnitPrice>18</UnitPrice>

    <UnitsInStock>39</UnitsInStock>

    <UnitsOnOrder>0</UnitsOnOrder>

    <ReorderLevel>10</ReorderLevel>

    <Discontinued>false</Discontinued>

   </products>

   <products diffgr:id="products2" msdata:rowOrder="1">

    <ProductID>2</ProductID>

    <ProduсtName>Chang</ProductName>

    <SupplierID>1</SupplierID>

    <CategoryID>1</CategoryID>

    <QuantityPerUnit>24 - 12 oz bottles</QuantityPerUnit>

    <UnitPrice>19</UnitPrice>

    <UnitsInStock>17</UnitsInStock>

    <UnitsOnOrder>40</UnitsOnOrder>

    <ReorderLevel>25</ReorderLevel>

    <Discontinued>false</Discontinued>

   </products>

…

   <products diffgr:id="products78" msdata:rowOrder="77" diffgr:hasChanges="inserted">

    <ProductID>100</ProductID>

    <ProductName>This is a new product</ProductName>

    <SupplierID>12</SupplierID>

    <CategoryID>2</CategoryID>

    <QuantityPerUnit>12</QuantityPerUnit>

    <UnitPrice>23</UnitPrice>

    <UnitsInStock>5</UnitsInStock>

    <UnitsOnOrder>0</UnitsOnOrder>

    <ReorderLevel>1</ReorderLevel>

    <Discontinued>false</Discontinued>

   </products>

  </XMLProducts>

  <diffgr:before>

   <products diffgr:id="products1" msdata:rowOrder="0">

    <ProductID>1</ProductID>

    <ProductName>Chai </ProductName>

    <SupplierID>1</SupplierID>

    <CategoryID>1</CategoryID>

    <QuantityPerUnit>10 boxes x 20 bugs </QuantityPerUnit>

    <UnitPrice>18</UnitPrice>

    <UnitsInStock>39</UnitsInStock>

    <UnitsOnOrder>0</UnitsOnOrder>

    <ReorderLevel>10</ReorderLevel>

    <Discontinued>false</Discontinued>

   </products>

  </diffgr:before>

</diffgr:diffgram>

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ повторяСтся каТдая строка DataTable, ΠΈ Ρ‡Ρ‚ΠΎ сущСствуСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ diffgr:id для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта <products>. diffgr являСтся прСфиксом пространства ΠΈΠΌΠ΅Π½ для urn:schemas-microsoft-com:xml-diffgram-v1. Для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки ΠΈ для вставлСнной строки ADO.NET добавляСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ diffgr:hasChanges. Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ элСмСнт <diffgr:before> послС элСмСнта <XMLProducts>, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит элСмСнт <products>, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ содСрТаниС всСх ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… строк. Для Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ строки Π½Π΅ сущСствуСт "before", поэтому здСсь отсутствуСт элСмСнт <diffgr:before>, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ присутствуСт для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ DiffGram считан Π² DataTable, ΠΎΠ½ оказываСтся Π² состоянии, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» Π±Ρ‹ послС выполнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ AcceptChanges. Π’ этом мСстС ΠΌΠΎΠΆΠ½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ измСнСния, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ RejectChanges. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ свойство DataRow.Item ΠΈ пСрСдавая Π»ΠΈΠ±ΠΎ DataRowVersion.Original, Π»ΠΈΠ±ΠΎ DataRowVersion.Current, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ значСния Π² DataTable ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ послС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² XML

БСриализация являСтся процСссом сохранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° дискС. Другая Ρ‡Π°ΡΡ‚ΡŒ прилоТСния ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ состоянии, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ Π±Ρ‹Π» Π΄ΠΎ сСриализации. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° .NET содСрТит Π΄Π²Π° способа выполнСния сСриализации. Рассмотрим пространство ΠΈΠΌΠ΅Π½ System.Xml.Serialization.

Как ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ имя, сСриализация производится Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML. Π­Ρ‚ΠΎ дСлаСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² элСмСнты ΠΈ/ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ XML Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ скрытыС Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠΉΡ‚Π΅ это ΠΊΠ°ΠΊ способ сохранСния состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ скрытыС Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ BinaryFormatter Π² пространствС ΠΈΠΌΠ΅Π½ System.Runtime.Serialization.Formatters.Binary. МоТно Ρ‚Π°ΠΊΠΆΠ΅:

β–‘ ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ΠΈΠ»ΠΈ элСмСнтом.

β–‘ ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ пространство ΠΈΠΌΠ΅Π½.

β–‘ Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΈΠ»ΠΈ элСмСнта.

ВмСстС с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ достиТимы ΠΈΠ· сСриализуСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). Π­Ρ‚ΠΎ Π½Π΅ являСтся ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ классов этого Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΈ скрытыС Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π³Ρ€Π°Ρ„ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², содСрТащий мноТСство Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ пространством ΠΈΠΌΠ΅Π½ System.Runtime.Serialization.Formatters.Binary.

Π”Π°Π½Π½Ρ‹Π΅ для сСриализации ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, полями, массивами ΠΈ XML, встроСнным Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² XmlElement ΠΈ XmlAttribute. Бвязью ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ XML ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΡŽΡ‚ классы. Π­Ρ‚ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСриализатор, ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET сущСствуСт инструмСнт, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹,β€” это ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° xsd.exe, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

β–‘ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ схСму XML ΠΈΠ· Ρ„Π°ΠΉΠ»Π° схСмы XDR

β–‘ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ схСму XML ΠΈΠ· Ρ„Π°ΠΉΠ»Π° XML

β–‘ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ классы DataSet ΠΈΠ· Ρ„Π°ΠΉΠ»Π° схСмы XSD

β–‘ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ классы Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ для XmlSerilization

β–‘ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ XSD ΠΈΠ· классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹

β–‘ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ список элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅

β–‘ ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдставлСн Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ (C#, VB.NET, ΠΈΠ»ΠΈ JScript.NET)

β–‘ Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ схСмы ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… сборках

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

НСсмотря Π½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ возмоТности, вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ xsd.exe, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ классы для сСриализации. Рассмотрим простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сСриализуСт класс, ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ…, сохранСнных Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ находится Π² ΠΏΠ°ΠΏΠΊΠ΅ SerialSample1). Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ простой ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Product, pd, ΠΈ записываСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

private void button1_Click(object sender, System.EventArgs e) {

 // Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Products

 Products pd=new Products();

 // Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства

 pd.ProductXD=200;

 pd.CategoryID=100;

 pd.Discontinued=false;

 pd.ProductName="Serialize Objects";

 pd.QuantityPerUnit="6";

 pd.ReorderLevel=1;

 pd.SupplierID=1;

 pd.UnitPrice=1000;

 pd.UnitsInStock=10;

 pd.UnitsOnOrder=0;

ΠœΠ΅Ρ‚ΠΎΠ΄ Serialize класса XmlSerializer ΠΈΠΌΠ΅Π΅Ρ‚ ΡˆΠ΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… вСрсий. Одним ΠΈΠ· Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² являСтся ΠΏΠΎΡ‚ΠΎΠΊ для записи Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Stream, TextWriter ΠΈΠ»ΠΈ XmlWriter. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ создали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ tr Π½Π° основС TextWriter. Π—Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ sr Π½Π° основС XmlSerializer. XmlSerializer Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ сСриализуСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово typeof с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сСриализован. ПослС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° sr вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Serialize, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся tr (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° основС Stream) ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС pd. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

 //Π½ΠΎΠ²Ρ‹ΠΉ TextWriter ΠΈ XmlSerializer

 TextWriter tr=new StreamWriter("..\\..\\..\\serialprod.xml");

 XmlSerializer sr=new XmlSerializer(typeof(Products));

 // сСриализуСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

 sr.Serialize(tr,pd);

 tr.Close();

}

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ добавляСм событиС Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° newPd Π½Π° основС Products. Π’ этот Ρ€Π°Π· ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ FileStream для чтСния XML: