ServiceStack序列化

3
例如,我有这个对象。
JsonObject o = new JsonObject();
o.Add("k1","0123");
o.Add("k2","123.");

当我序列化这个JSON对象时,结果是错误的:
{
 "k1":0123,"k2":123.
}

它假设那些是数字,但这些都是错误的数字。 我们在客户端反序列化它们时遇到了问题。 正确的值应该像下面这样:
{
"k1":"0123","k2":"123."
}

我该如何实现这个?如何完全禁用数字检测?下面的配置没有帮助,我认为它们是用于其他目的。
JsConfig.TryToParseNumericType = false;
JsConfig.TryToParsePrimitiveTypeValues = false;
2个回答

3

JsonObject 类继承自 Dictionary<string, string>,因此我认为您无法对其进行太多更改。您可以创建一个 Dictionary<string, object> 实例来代替。

[Test]
public void SerializerTest()
{
    Dictionary<string, object> o = new Dictionary<string, object>();
    o.Add("k1", "0123");
    o.Add("k2", "123.");

    Assert.AreEqual("{\"k1\":\"0123\",\"k2\":\"123.\"}", 
                    JsonSerializer.SerializeToString(o));
}

@jaynakus,我更新了这个例子,是否符合您的要求? - Ufuk Hacıoğulları
对试图帮助你的陌生人无礼对他们确实有很大帮助。 - Rosdi Kasim
谢谢,我按照你的方式做了,Ufuk。 - jaynakus

1
我建议您使用JsonConvert类,它可以很好地处理JSON。 用法如下:
var serialized = JsonConvert.SerializeObject(new { k1 = "0123", k2 = "123" });
dynamic deserialized = JsonConvert.DeserializeObject(serialized);
Assert.That(deserialized.k1.ToString(), Is.EqualTo("0123")); // deserialized.k1 will be an object of 'JValue', so need to call toString() 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接