如何在ServiceStack 4的OrmLite.MySql中更改Guids的序列化方法?
版本3与MySQL存储Guids作为没有破折号的文本,同样没有使用破折号进行比较。
升级ServiceStack 4后,我的所有查找都不返回任何数据。在MySQL日志中,OrmLite发送的查询现在包括破折号,这就是没有匹配的原因。我需要将其设置回以前的行为。
我有如下定制的序列化设置。他们现在是否也像DTO一样申请OrmLite?
void CustomSerializationSettings()
{
ServiceStack.Text.JsConfig<Guid>.SerializeFn = guid => guid.ToString();
ServiceStack.Text.JsConfig<Guid?>.SerializeFn = guid => guid.HasValue ? guid.ToString() : string.Empty;
ServiceStack.Text.JsConfig.IncludeNullValues = true;
ServiceStack.Text.JsConfig.DateHandler = ServiceStack.Text.DateHandler.ISO8601;
ServiceStack.Text.JsConfig<DateTime>.SerializeFn = DateTimeSerialising.SerialiseDate;
ServiceStack.Text.JsConfig<DateTime>.DeSerializeFn = DateTimeSerialising.DeserialiseDate;
ServiceStack.Text.JsConfig<DateTime?>.SerializeFn = DateTimeSerialising.SerialiseDateN;
ServiceStack.Text.JsConfig<DateTime?>.DeSerializeFn = DateTimeSerialising.DeserialiseDateN;
}
答案 0 :(得分:0)
这是一个breaking change in v4.09,其中MySql和Sqlite现在将Guids视为CHAR(36),其中special casing of Guids was removed for MySQL and Sqlite providers使得相同的SQL LINQ表达式可以在所有提供者中使用。
从命名空间ServiceStack.Text.JsConfig
推断出仅适用于文本序列化,而不适用于OrmLite。除了使用自定义的MySqlDialectProvider覆盖OrmLite的MySqlDialectProvider以重新添加特殊套管之外,没有简单的覆盖。然而,建议升级数据以使用新的(自然的)Guid.ToString()
格式;