C# DateTime类型 直接使用Proto、Bson 问题

Proto问题 

默认这里的时区为UTC、DateTimeOffset 为0,参考下面文档可找到;这就会导致设置的时区信息丢失,如下

eg.

// json

"VitalityUpdateTime":"2023-10-31T15:19:25.150505+08:00",

// proto, 没有带时区
"VitalityUpdateTime":"2023-10-31T15:19:25.150505",

// bson,没有带时区
VitalityUpdateTime":"2023-10-31T15:19:25.150",

参考

Protobuf scalar data types - gRPC for WCF developers - .NET | Microsoft Learn

Proto 解决办法

由于DateTime时C#的内建类型,不能使用 RuntimeTypeModel.Default.Add() 中添加

查看源码可知,当 RuntimeTypeModel.Default.IncludeDateTimeKind = true; 时序列化时会带时区
 

Bson 解决办法

设置序列化时类

BsonSerializer.RegisterSerializer(typeof(DateTime), new DateTimeSerializer(DateTimeKind.Local));

修改完结果

// json

VitalityUpdateTime":"2023-10-31T16:17:43.2287652+08:00",

// proto
"VitalityUpdateTime":"2023-10-31T16:17:43.2287652+08:00"
// bson
VitalityUpdateTime":"2023-10-31T16:17:43.228+08:00",

你可能感兴趣的:(工作,细节,c#,前端,javascript)