ISyncKnowledge::Serialize

将知识对象数据序列化到一个字节数组。

HRESULT Serialize( 
  BOOL fSerializeReplicaKeyMap,
  BYTE *pbKnowledge,
  DWORD *pcbKnowledge);

参数

  • fSerializeReplicaKeyMap
    [in] 如果序列化包含在知识中的 IReplicaKeyMap 对象,则为 TRUE;否则为 FALSE
  • pbKnowledge
    [in, out, unique, size_is(*pcbKnowledge)] 接收序列化知识数据的字节数组。
  • pcbKnowledge
    [in, out] 指定 pbKnowledge 中的字节数。如果 pbKnowledge 太小,则返回序列化副本键映射数据所需的字节数;否则返回写入的字节数。

返回值

  • S_OK。

  • E_POINTER。

  • E_INVALIDARG。

  • E_OUTOFMEMORY。

  • 如果 pbKnowledge 太小,则返回值为 HRESULT_FROM_WIN32(ERROR_MORE_DATA)。在这种情况下,将在 pcbKnowledge 中返回必需的字节数。

备注

必须利用适当的 IReplicaKeyMap 接口 对象,才能使用 IProviderSyncServices::DeserializeSyncKnowledge 反序列化知识对象。在为 fSerializeReplicaKeyMap 指定 FALSE 时,会将 IReplicaKeyMap 对象与知识数据一起进行序列化。如果未指定此标志,则必须使用其他方式存储 IReplicaKeyMap 数据,以便能够反序列化知识对象。

序列化格式

包含在 pbKnowledge 中的序列化知识以压缩形式(没有填充)并按 Big-Endian 字节顺序存储。序列化知识按如下顺序包含以下元素。

  1. 一个标头部分。该标头部分包含以下元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    序列化格式的主版本。此值始终为 3。

    ULONG

    4

    序列化格式的次版本。此值始终为 0。

  2. 如果 fSerializeReplicaKeyMap 为 TRUE,则显示一个副本键映射部分。否则,不显示任何副本键映射部分。IReplicaKeyMap::Serialize 中定义了副本键映射部分的格式。

  3. 一个 ID 格式架构部分。该 ID 格式架构部分包含以下元素:

    数据类型 以字节为单位的长度 说明

    BOOL

    1

    指示包含在知识中的项 ID 是固定长度还是可变长度。如果项 ID 是固定长度,则此值为 0;如果项 ID 是可变长度,则此值为 1。

    USHORT

    2

    固定长度的项 ID 的长度(以字节为单位),或可变长度的项 ID 的最大长度。

    BOOL

    1

    指示包含在知识中的变更单位 ID 是固定长度还是可变长度。如果变更单位 ID 是固定长度,则此值为 0;如果变更单位 ID 是可变长度,则此值为 1。

    USHORT

    2

    固定长度的变更单位 ID 的长度(字节),或可变长度的变更单位 ID 的最大长度。

  4. 一个范围时钟向量部分。该范围时钟向量部分包含以下元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    时钟向量签名。如果时钟向量不包含 FeedSync 馈送项,则此值为 1;否则此值为 9。

    ULONG

    4

    包含在此时钟向量中的时钟向量元素的数量。

    如果时钟向量包含 FeedSync 馈送项,则序列化知识中包含以下部分。否则,以下部分不存在:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    已对与此知识关联的 FeedSync 馈送进行的更新的次数。此值与 FeedSync 馈送的 updates 属性相对应。

    BYTE

    1

    指示 FeedSync 馈送是否跟踪冲突。此值与 FeedSync 馈送的 noconflicts 属性相对应。如果未设置 noconflicts,则此值为 0;否则此值为 1。

    时钟向量部分的余部包含一个时钟向量元素的列表,其中元素的数量与时钟向量部分中先前指定的数值相等。

    每个时钟向量元素都包含以下元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    副本键。

    ULONGLONG

    8

    滴答计数。

    当知识与 FeedSync 馈送关联时,每个时钟向量元素将包含以下附加元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    FeedSync 馈送的 when 值的日期部分。

    ULONG

    4

    FeedSync 馈送的 when 值的时间部分。

    BYTE

    1

    与 FeedSync 馈送关联的标志。

  5. 一个范围异常部分。该范围异常部分包含以下元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    范围异常部分签名。此值始终为 3。

    ULONG

    4

    知识中包含的范围异常的数量。

    范围异常部分包含一个范围异常的列表,其中范围异常的数量与上一个 ULONG 中指定的数值相等。

    每个范围异常都包含以下元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    范围异常签名。此值始终为 2。

    当项 ID 为固定长度时:

    数据类型 以字节为单位的长度 说明

    字节序列

    在项 ID 格式中指定的长度。

    范围的下限项 ID 的固定长度项 ID。

    字节序列

    在项 ID 格式中指定的长度。

    范围的上限项 ID 的固定长度项 ID。

    或者,当项 ID 为可变长度时:

    数据类型 以字节为单位的长度 说明

    USHORT

    2

    可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。

    字节序列

    上一个 USHORT 中指定的长度。

    范围的下限项 ID 的可变长度项 ID。

    USHORT

    2

    可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。

    字节序列

    上一个 USHORT 中指定的长度。

    范围的上限项 ID 的可变长度项 ID。

    与范围异常关联的时钟向量:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    时钟向量签名。如果时钟向量不包含 FeedSync 馈送项,则此值为 1;否则此值为 9。

    ULONG

    4

    包含在此时钟向量中的时钟向量元素的数量。

    如果时钟向量包含 FeedSync 馈送项,则序列化知识中包含以下部分。否则,以下部分不存在:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    已对与此知识关联的 FeedSync 馈送进行的更新的次数。此值与 FeedSync 馈送的 updates 属性相对应。

    BYTE

    1

    指示 FeedSync 馈送是否跟踪冲突。此值与 FeedSync 馈送的 noconflicts 属性相对应。如果未设置 noconflicts,则此值为 0;否则此值为 1。

    时钟向量的余部包含一个时钟向量元素的列表,其中元素的数量与时钟向量部分中先前指定的数值相等。

    每个时钟向量元素都包含以下元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    副本键。

    ULONGLONG

    8

    滴答计数。

    当知识与 FeedSync 馈送关联时,每个时钟向量元素将包含以下附加元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    FeedSync 馈送的 when 值的日期部分。

    ULONG

    4

    FeedSync 馈送的 when 值的时间部分。

    BYTE

    1

    与 FeedSync 馈送关联的标志。

  6. 单个项异常部分。该单个项异常部分包含以下元素:

    数据类型 以字节为单位的长度 说明

    ULONG

    4

    单个项异常部分签名。此值始终为 6。

    ULONG

    4

    时钟向量表签名。此值始终为 4。

    ULONG

    4

    时钟向量表中包含的时钟向量的数量。

    1. 时钟向量表。时钟向量表中包含一个时钟向量的列表,其中时钟向量的数量与上一个 ULONG 中指定的数值相等。每个时钟向量都包含以下元素:

      数据类型 以字节为单位的长度 说明

      ULONG

      4

      时钟向量签名。如果时钟向量不包含 FeedSync 馈送项,则此值为 1;否则此值为 9。

      ULONG

      4

      包含在此时钟向量中的时钟向量元素的数量。

      如果时钟向量包含 FeedSync 馈送项,则序列化知识中包含以下部分。否则,以下部分不存在:

      数据类型 以字节为单位的长度 说明

      ULONG

      4

      已对与此知识关联的 FeedSync 馈送进行的更新的次数。此值与 FeedSync 馈送的 updates 属性相对应。

      BYTE

      1

      指示 FeedSync 馈送是否跟踪冲突。此值与 FeedSync 馈送的 noconflicts 属性相对应。如果未设置 noconflicts,则此值为 0;否则此值为 1。

      时钟向量的余部包含一个时钟向量元素的列表,其中元素的数量与时钟向量部分中先前指定的数值相等。

      每个时钟向量元素都包含以下元素:

      数据类型 以字节为单位的长度 说明

      ULONG

      4

      副本键。

      ULONGLONG

      8

      滴答计数。

      当知识与 FeedSync 馈送关联时,每个时钟向量元素将包含以下附加元素:

      数据类型 以字节为单位的长度 说明

      ULONG

      4

      FeedSync 馈送的 when 值的日期部分。

      ULONG

      4

      FeedSync 馈送的 when 值的时间部分。

      BYTE

      1

      与 FeedSync 馈送关联的标志。

    2. 单个项异常表。该单个项异常表包含以下元素:

      数据类型 以字节为单位的长度 说明

      ULONG

      4

      单个项异常表中包含的单个项异常的数量。

      该表中的每个项异常包含以下元素:

      当项 ID 为固定长度时:

      数据类型 以字节为单位的长度 说明

      字节序列

      在项 ID 格式中指定的长度。

      与单个项异常关联的固定长度的项 ID。

      或者,当项 ID 为可变长度时:

      数据类型 以字节为单位的长度 说明

      USHORT

      2

      可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。

      字节序列

      上一个 USHORT 中指定的长度。

      与单个项异常关联的可变长度的项 ID。

      每个项异常都包含以下附加元素:

      数据类型 以字节为单位的长度 说明

      ULONG

      4

      当单个项异常引用某个项时,此值是时钟向量表中的一个索引并包含在此序列化数据中。当单个项异常引用一个或多个变更单位异常时,此值为 0xFFFFFFFF。

      ULONG

      4

      异常中包含的变更单位异常的数量。此值可以为 0。

      当存在变更单位异常时,将后跟一个变更单位异常的列表。该列表包含上一个 ULONG 中指定的变更单位异常的数量。

      每个变更单位异常都包含以下元素。

      当变更单位 ID 是固定长度时:

      数据类型 以字节为单位的长度 说明

      字节序列

      以变更单位 ID 格式指定的长度。

      与变更单位异常关联的固定长度的变更单位 ID。

      或者,当变更单位 ID 是可变长度时:

      数据类型 以字节为单位的长度 说明

      USHORT

      2

      可变长度的 ID 的长度(以字节为单位)。此长度包括包含长度的 USHORT 的两个字节以及包含实际 ID 的字节。

      字节序列

      上一个 USHORT 中指定的长度。

      与变更单位异常关联的可变长度的变更单位 ID。

      每个变更单位异常都包含以下附加元素:

      数据类型 以字节为单位的长度 说明

      ULONG

      4

      包含在此序列化数据中的时钟向量表中的索引。

请参阅

参考

ISyncKnowledge 接口