[英]Is there a way to make ServiceStack.Redis use JSON.NET instead of ServiceStack.Text?
有没有一种方法可以使ServiceStack.Redis使用JSON.NET而不是ServiceStack.Text?
我问的原因是因为在特定情况下,整数在ServiceStack.Text中转换为字符串,而在JSON.NET中却没有
通过有线将数据发送到Web时,这是一笔不小的交易。
在我们的特定情况下,JSON.NET将数据存储为
'偏移':0
和ServiceStack.Text将数据存储为
'偏移':'0'
为什么这很糟糕? 在javascript中,29 + 0 = 29,但29 +'0'='290'。 这意味着array [29 + offset]可以在ServiceStack.Text中产生奇怪的结果
我知道这是一个特定的用例,但是使用JSON.NET(行为符合预期)而不是ServiceStack.Text(速度快3倍,但行为却不符合预期)会容易得多。
它不将数字存储为文本,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
则序列化器不知道应将其转换为哪种类型,因此将其保留为字符串。
目前,您只能在ServiceStack的JsonSerializer和内置的JsonDataContractSerializer之间切换,可以通过将其添加到AppHost.Configure部分中来实现:
SetConfig(new EndpointHostConfig {
UseBclJsonSerializers = true
});
请参阅此线程以获取对以上信息的引用。
看来他们根本不支持针对不同序列化器的开箱即用的可配置选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.