点击或拖拽改变大小

SerializerCombine 方法 (ITextReader, Object)

反序列化指定 ITextReader 包含的增量文档,并与 原始对象 进行数据合并。

命名空间:  XPatchLib
程序集:  XPatchLib (在 XPatchLib.dll 中) 版本:4.1.0.4
语法
C#
public Object Combine(
	ITextReader pReader,
	Object pOriValue
)

参数

pReader
类型: XPatchLibITextReader
包含要反序列化的增量文档的 ITextReader 实例。
pOriValue
类型: SystemObject
待进行数据合并的原始对象。

返回值

类型: Object
正被反序列化及合并后的 Object
备注

默认不覆盖 pOriValue 对象实例。

在反序列化及合并之前,必须使用待合并的对象的类型构造一个 Serializer

示例

下面的示例使用 XmlTextReader 对象反序列化增量内容,并附加至原始对象。

C#
using System;
using System.IO;
using System.Xml;

namespace XPatchLib.Example
{
    public class CombineExample
    {
        public static void Main()
        {
            var example = new CombineExample();
            example.CombineObject("patch.xml");
        }

        private void CombineObject(string filename)
        {
            OrderedItem oldOrderItem = null;
            OrderedItem newOrderItem = null;

            var serializer = new Serializer(typeof(OrderedItem));
            using (var fs = new FileStream(filename, FileMode.OpenOrCreate))
            {
                oldOrderItem = new OrderedItem
                {
                    Description = "Big Widget",
                    ItemName = "Widgt",
                    Quantity = 0,
                    UnitPrice = (decimal) 4.7
                };

                // 采用不改动现有 oldOrderItem 合并方式,将增量内容与 oldOrderItem 内容进行合并,产生新的对象实例 newOrderItem
                // newOrderItem 与 oldOrderItem 非同一对象。
                using (var reader = new XmlTextReader(fs))
                {
                    newOrderItem = (OrderedItem) serializer.Combine(reader, oldOrderItem);
                }
            }

            Console.WriteLine("OldInstance:");
            Write(oldOrderItem);
            Console.WriteLine("NewInstance:");
            Write(newOrderItem);
        }

        private void Write(OrderedItem item)
        {
            Console.WriteLine(item.ItemName);
            Console.WriteLine(item.Description);
            Console.WriteLine(item.UnitPrice);
            Console.WriteLine(item.Quantity);
            Console.WriteLine(item.GetHashCode());
            Console.WriteLine("-----");
        }

        public class OrderedItem
        {
            public string Description;
            public string ItemName;
            public int Quantity;
            public decimal UnitPrice;
        }
    }
}
patch.xml
<?xml version="1.0" encoding="utf-8" ?>
<OrderedItem>
  <Description>Small Widget</Description>
  <Quantity>10</Quantity>
  <UnitPrice>2.30</UnitPrice>
</OrderedItem>

输出内容如下:

OldInstance:
Widgt
Big Widget
4.7
0
21170186
-----
NewInstance:
Widgt
Small Widget
2.30
10
13134304
-----
版本信息

.NET Framework

支持版本:4.5, 4.0, 3.5, 2.0

.NET Standard

支持版本:2.0, 1.3, 1.0
参见