2011-11-03 3 views
13

Sadece parametreler hakkında herhangi bir şey bilmeden JSON'dan anonim bir yazı oluşturmaya çalışıyorum ve bunları tamamen yorumlayın (muhtemelen ipuçlarıyla). yani bu değer int, string veya date gibi "görünüyor".JSON.Net kullanarak anonim bir türe nasıl seri hale getirilir?

Şu ana kadar bildiğim tek yol, önceden bildiğiniz bir anonim tür oluşturmaktır. Aşağıdaki .DeserializeAnonymousType (...) yöntemine bakın.

Bundan daha iyisini yapan var mı? Teşekkürler.

 var jsonString = "{\"user_id\": 1, \"user_type\": \"moderator\", \"name\": \"Fred\"}"; 

     JToken root = JObject.Parse(jsonString); 

     var anonTemplate = new{user_id=0, user_type="", name="" }; 

     var a = JsonConvert.DeserializeAnonymousType(root.ToString(), anonTemplate); 


     var b = JsonConvert.DeserializeObject<Object>(root.ToString()); // actually turns into a JsonObject which is something differet. 

Güncelleme Ben dynamicduck indirilen ve biraz onunla oynuyorum. Bu garip dinamik “sarıcı” fikri Brian'ın ihtiyaç duyduğum şekillerde (seri hale getirilebilir, vb.) Düşünülecek mi?

http://weblogs.asp.net/britchie/archive/2010/08/05/json-net-dynamic-extensions.aspx

http://weblogs.asp.net/britchie/archive/2010/08/03/dynamicduck-duck-typing-in-a-dynamic-world.aspx

+0

Sana dynamic' nesnesine 'mümkün serisi kaldırılmaya olması gerektiğini varsayalım ve daha sonra açıkça gerekli özelliklere – sll

+2

erişmek nasıl bunu varsa veya beklenen hangi parametrelere bilmiyorsanız bu nesneyi tüketmek niyetinde yapmak var? – KallDrexx

+0

@sll: bir örnek var mı? Dinamik tiplere karşı değil. Onları arada kullanıyorum. Bu durumda, sıradaki sorum, dinamikten anon türüne nasıl dönüştürebileceğinizi olurdu. Her iki yoldan da memnunum çünkü performans bir sorun değil, ancak bu durumda bir anon türüne ihtiyacım var (mevcut kütüphaneler). – sgtz

cevap

6

Sen ExpandoObjectConverter kullanarak ExpandoObject için Json.NET ile serisini.

zamanında bir anonim tür oluşturmak için, onun biraz daha karmaşık, çemberler bakmak Bu Konuda aracılığıyla atladı: Eğer çaba biraz görebileceğiniz gibi

How to create LINQ Expression Tree to select an anonymous type

o muhtemelen herhangi bir derleme zamanı güvenliği elde edemeyeceğinize değmez. Yani bir dynamic veya ExpandoObject en iyi bahisler. .NET 4 durumunda

+1

ile bağlantı kuramayacağınız bir ExpandoObjectConverter kullanımı örneğiniz var mı? – sgtz