有没有办法让ServiceStack.Redis使用JSON.NET而不是ServiceStack.Text?
我问的原因是因为在ServiceStack.Text中将整数转换为字符串而在JSON.NET中没有转换为字符串的特定情况
通过网络将数据发送到网络时,这是一件大事。
在我们的具体情况中,JSON.NET将数据存储为
'抵消':0
和ServiceStack.Text将数据存储为
'抵消':'0'
为什么这很糟糕?在javascript中,29 + 0 = 29但29 +'0'='290'。这意味着使用ServiceStack.Text
,数组[29 + offset]会产生奇怪的结果我知道这是一个特定的用例,但是使用JSON.NET(行为符合预期)而不是ServiceStack.Text(速度提高3倍但行为不符合预期)要容易得多。
答案 0 :(得分:2)
它不会将数字存储为文本,ServiceStack.Text中的实际行为:
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
中,则序列化程序不知道它应该将其转换为什么类型,因此它将其保留为字符串。
答案 1 :(得分:1)
目前你只能在ServiceStack的JsonSerializer和内置的JsonDataContractSerializer之间切换,你可以把它添加到AppHost.Configure部分:
SetConfig(new EndpointHostConfig {
UseBclJsonSerializers = true
});
请参阅this主题以获取上述信息的参考。
看起来他们根本不支持不同序列化程序的开箱即用可配置选项。