如何通过 ProtoBuf-net 使用 DateTimeKind 选项序列化 DateTime 字段
How to serialize the DateTime field with DateTimeKind option through ProtoBuf-net
如何通过 ProtoBuf 使用 DateTimeKind 选项序列化日期时间字段。反序列化时,我想要带有 DateTimeKind 选项的日期时间字段。
我知道我们可以通过添加一个额外的 属性 来将反序列化值转换为 UTC 格式来实现这一点。
例如,我有一个名为 UtcDateTime 的日期时间字段。它具有 UTC 种类格式的值。当序列化和反序列化这个值时,我得到了正确的结果,但它未能检索日期时间类型选项。
这是我的示例代码:
[ProtoIgnore]
public DateTime UtcDateTime { get; set; }
[ProtoMember(3)]
public DateTime DateTimeValue
{
get { return UtcDateTime ; }
set { UtcDateTime = DateTime.SpecifyKind(value, DateTimeKind.Utc); }
}
现在考虑我的情况,我的应用程序有很多这样的日期时间字段。而不是在所有地方添加额外的 属性 我需要一个通用的解决方案来实现这一点。如果可能,请解释如何使用示例 C# 逻辑实现此目的。提前致谢。
在序列化或反序列化任何内容之前将此代码包含到 运行:
RuntimeTypeModel.Default.IncludeDateTimeKind = true;
现在你的合约可以这么简单(不需要加倍属性):
[ProtoMember(3)]
public DateTime DateTimeValue { get; set; }
并且DateTimeKind
的值会自动写入和读取。
兼容性问题
值得注意的是,原始 Protocol Buffers 规范不包括 DateTimeKind
(它特定于 .NET)——请参阅 protobuf-net v2.1.0 中的 protobuf-net does not deserialize DateTime.Kind correctly . Opt-in support of serializing DateTimeKind
was added。
如果您与另一个系统交换这些消息,除非另一端使用 protobuf-net 并将 IncludeDateTimeKind
设置为 true
。
,否则它将无法工作
如何通过 ProtoBuf 使用 DateTimeKind 选项序列化日期时间字段。反序列化时,我想要带有 DateTimeKind 选项的日期时间字段。
我知道我们可以通过添加一个额外的 属性 来将反序列化值转换为 UTC 格式来实现这一点。
例如,我有一个名为 UtcDateTime 的日期时间字段。它具有 UTC 种类格式的值。当序列化和反序列化这个值时,我得到了正确的结果,但它未能检索日期时间类型选项。
这是我的示例代码:
[ProtoIgnore]
public DateTime UtcDateTime { get; set; }
[ProtoMember(3)]
public DateTime DateTimeValue
{
get { return UtcDateTime ; }
set { UtcDateTime = DateTime.SpecifyKind(value, DateTimeKind.Utc); }
}
现在考虑我的情况,我的应用程序有很多这样的日期时间字段。而不是在所有地方添加额外的 属性 我需要一个通用的解决方案来实现这一点。如果可能,请解释如何使用示例 C# 逻辑实现此目的。提前致谢。
在序列化或反序列化任何内容之前将此代码包含到 运行:
RuntimeTypeModel.Default.IncludeDateTimeKind = true;
现在你的合约可以这么简单(不需要加倍属性):
[ProtoMember(3)]
public DateTime DateTimeValue { get; set; }
并且DateTimeKind
的值会自动写入和读取。
兼容性问题
值得注意的是,原始 Protocol Buffers 规范不包括 DateTimeKind
(它特定于 .NET)——请参阅 protobuf-net v2.1.0 中的 protobuf-net does not deserialize DateTime.Kind correctly . Opt-in support of serializing DateTimeKind
was added。
如果您与另一个系统交换这些消息,除非另一端使用 protobuf-net 并将 IncludeDateTimeKind
设置为 true
。