Ватсон Карли
Шрифт:
</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
. Можно также: