2013-11-20 2 views
3

Например, у меня есть этот объектServicestack сериализации

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; 

ответ

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)); 
} 
+0

Это не ответ, который я ожидал, прочитать вопрос внимательно – jaynakus

+0

@jaynakus Я обновил пример. Это то, что вы хотите? –

+0

Быть грубым для незнакомцев, пытающихся помочь вам, очень помогает. –

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() 
Смежные вопросы