有没有办法让ServiceStack.Redis使用JSON.NET而不是ServiceStack.Text

本文关键字:ServiceStack NET Text JSON 使用 Redis 有没有 | 更新日期: 2023-09-27 17:59:40

有没有办法让ServiceStack.Redis使用JSON.NET而不是ServiceStack.Text?

我之所以这么问,是因为有一个特定的情况,整数在ServiceStack.Text中被转换为字符串,而在JSON.NET 中却没有

当通过有线将数据发送到网络时,这是一笔巨大的交易。

在我们的特定情况下,JSON.NET将数据存储为
"偏移量":0
和ServiceStack。文本将数据存储为
"偏移量":"0"

为什么这很糟糕?在javascript中,29+0=29,但29+'0'='290'。这意味着数组[29+offset]可能会在ServiceStack.Text 中产生奇怪的结果

我知道这是一个特定的用例,但使用JSON.NET(其行为符合预期)而不是ServiceStack.Text(其速度快3倍,但行为不符合预期)会容易得多。

有没有办法让ServiceStack.Redis使用JSON.NET而不是ServiceStack.Text

它不将数字存储为文本,ServiceStack中的实际行为。文本:

public class HasOffset
{
    public int Offset { get; set; }
}
var dto = new HasOffset { Offset = 1 };
string json = dto.ToJson();
json.Print(); //prints {"Offset":1}
var fromJson = json.FromJson<HasOffset>();
Assert.That(fromJson.Offset, Is.EqualTo(1));

如果您试图使用JsonObject对其进行反序列化,则会将其解析为Dictionary<string,string>字典,并将其强制转换为字符串。同样,如果您试图将其存储到object中,序列化程序不知道应该将其转换为什么类型,因此将其保留为字符串。

目前您只能在ServiceStack的JsonSerializer和内置的JsonDataContractSerializer之间切换,您可以通过将其添加到AppHost来完成。配置部分:

SetConfig(new EndpointHostConfig {
    UseBclJsonSerializers = true
});

请参阅此线程以获取对上述信息的引用。

看起来他们根本不支持为不同的序列化程序提供开箱即用的可配置选项。