SerializerDivide 方法 |
命名空间: XPatchLib
public void Divide( ITextWriter pWriter, Object pOriValue, Object pRevValue )
使用 Divide 方法将原始对象与更新后对象之间差异内容的的公共字段和读/写属性转换为 增量数据。它不转换方法、索引器、私有字段或只读属性。
下面的示例使用 XmlTextWriter 序列化指定的 原始对象 与 更新对象 间的增量内容。
using System; using System.IO; using System.Text; using System.Xml; namespace XPatchLib.Example { public class DivideExample { public static void Main(string[] args) { var t = new DivideExample(); t.Divide(); } private void Divide() { var serializer = new Serializer(typeof(OrderedItem)); //原始对象 var oldOrderItem = new OrderedItem(); oldOrderItem.ItemName = "Widget"; oldOrderItem.Description = "Small Widget"; oldOrderItem.Quantity = 10; oldOrderItem.UnitPrice = (decimal) 2.30; oldOrderItem.Calculate(); //更新后对象 var newOrderItem = new OrderedItem(); newOrderItem.ItemName = "Widget"; newOrderItem.Description = "Big Widget"; newOrderItem.Quantity = 15; newOrderItem.UnitPrice = (decimal) 7.80; newOrderItem.Calculate(); using (var ms = new MemoryStream()) { using (var writer = new XmlTextWriter(ms, new UTF8Encoding(false))) { serializer.Divide(writer, oldOrderItem, newOrderItem); } ms.Position = 0; using (var stremReader = new StreamReader(ms, Encoding.UTF8)) { Console.WriteLine(stremReader.ReadToEnd()); } } } public class OrderedItem { public string Description; public string ItemName; public decimal LineTotal; public int Quantity; public decimal UnitPrice; public void Calculate() { LineTotal = UnitPrice * Quantity; } } } }
输出内容如下:
<?xml version="1.0" encoding="utf-8"?> <OrderedItem> <Description>Big Widget</Description> <LineTotal>117.0</LineTotal> <Quantity>15</Quantity> <UnitPrice>7.8</UnitPrice> </OrderedItem>