繁体   English   中英

有没有一种方法可以使ServiceStack.Redis使用JSON.NET而不是ServiceStack.Text?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM