有没有办法让 ServiceStack.Redis 使用 JSON.NET 而不是 ServiceStack.Text?
我问的原因是因为一个特定的情况,整数在 ServiceStack.Text 中转换为字符串,但在 JSON.NET 中没有转换
当通过网络将数据发送到网络时,这是一件大事。
在我们的特定情况下,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
中序列化程序不知道应将其转换为什么类型,因此将其保留为字符串。
关于c# - 有没有办法让 ServiceStack.Redis 使用 JSON.NET 而不是 ServiceStack.Text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23227727/