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

标签 c# javascript json redis servicestack

有没有办法让 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/

相关文章:

c# - 我可以在同一个项目中引用一个 dll 的两个版本而不将它们放入 GAC 中吗?

c# - 如何退出方法并将控制权返回给用户而不是调用方法?

javascript - 为什么 Function 属性定义在对象本身上(例如 Function.name),而方法定义在 Function.prototype 上?

javascript - 表格内的嵌套自定义组件呈现在错误的位置?

javascript - 取消/中止/确认 HTML 5 状态更改事件 (onpopstate)

javascript - 如果名称通过 JSON 传递,如何访问内存中的变量?

c# - 如何通过分配新集合来更新多对多集合?

c# - Null-Conditional 运算符是否在连续使用站点之间进行了优化,还是会导致重复检查?

java - java中将json映射到具有多个 ""的对象

express.js 中的 JSON 序列化算法