2012-03-11 5 views
0

При использовании пространств имен Microsoft System.Web.Helpers и System.Web.Script.Serialization Я ожидал, что сериализатор Microsoft хорошо сыграет с динамическим объектом JSON от Microsoft. Оказывается, это было наивное предположение. JavaScriptSerializer сериализует объект в "{}". Каков рекомендуемый способ для этой кажущейся тривиальной задачи?Каков простой способ извлечения строки JSON из Microsoft DynamicJsonObject?

 dynamic obj = new DynamicJsonObject(new Dictionary<string,object>()); 
    obj.FirstName = "Henry"; 
    obj.LastName = "Ford"; 
    JavaScriptSerializer jsc = new JavaScriptSerializer(); 
    string str = jsc.Serialize(obj); 
    Assert.AreNotEqual(str, "{}"); // Does not fail 

ответ

1

Попробуйте Json.Net

dynamic obj = new DynamicJsonObject(new Dictionary<string,object>()); 
obj.FirstName = "Henry"; 
obj.LastName = "Ford"; 
string str = JsonConvert.SerializeObject(obj); 

Он будет делать это успешно. Вы можете использовать его с анонимными классами

string s = JsonConvert.SerializeObject(new {FirstName="Henry",LastName="Ford"}); 

и ExpandoObject слишком

dynamic obj = new ExpandoObject(); 
obj.FirstName = "Henry"; 
obj.LastName = "Ford"; 
string s = JsonConvert.SerializeObject(obj); 

десериализации для динамических объектов также можно

dynamic obj2 = JsonConvert.DeserializeObject(@"{""FirstName"":""Henry"",""LastName"":""Ford""}"); 
Console.WriteLine(obj2.FirstName + " " + obj2.LastName); 
+0

ли Json.Net обеспечить альтернативу DynamicJsonObject или я должен использовать реализацию System.Web.Helpers? Я не впечатлен тем, что я нахожу в System.Web –

+0

. Я отмечу как ответ, когда и если будет сделан вывод, что части Microsoft сломаны (или «в беспорядке», в зависимости от обстоятельств). –

+0

@JackWester, я не уверен, что понимаю ваш вопрос, так как вам не нужно 'DynamicJsonObject' работать с динамическими объектами. Я обновил ответ, показывающий, как использовать 'ExpandoObject' для этой цели - L.B 11 мин назад –

Смежные вопросы