我正在寻找一种使用 MessagePack 和下面的消息类通过网络传输 SQL 查询结果的方法。
public class ExecuteDatabaseQueryResponse : IResponseMessage
{
[Key(0)]
public Guid RequestId { get; set; }
[Key(1)]
public required List<Dictionary<string, object?>>? Results { get; set; }
}
这通常是有效的,但有些值会在接收端更改其类型。例如,
decimal
值会变成字符串,DateTime
和 Guid
值也会变成字符串。
正确的做法是什么? 我希望仅保留“结果”字段的类型信息。
我尝试添加一个属性,例如:
[MessagePackFormatter(typeof(TypelessFormatter))]
或
[MessagePackFormatter(typeof(DynamicObjectTypeFallbackFormatter))]
但是没有成功。
构建一个包含
TypelessObjectResolver
的复合解析器似乎可以完成这项工作。
public static MessagePackSerializerOptions Get()
{
var resolver = CompositeResolver.Create(
NativeDecimalResolver.Instance,
NativeGuidResolver.Instance,
NativeDateTimeResolver.Instance,
TypelessObjectResolver.Instance,
StandardResolver.Instance
);
return MessagePackSerializerOptions.Standard.WithResolver(resolver);
}