2011-11-03 97 views
13

JSONから匿名型を作成しようとすると、あらかじめパラメータについて何も知らなくても、完全に解釈することができます(ヒントあり)。つまり、その値はint、文字列、または日付のように見えます。JSON.Netを匿名型にデシリアライズする方法は?

私がこれまで知っている唯一の方法は、あなたが事前知識を持っている匿名のタイプを作成することです。以下の.DeserializeAnonymousType(...)メソッドを参照してください。

これ以上の人はいますか?ありがとう。

 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. 

更新

私はdynamicduckをダウンロードし、それを少し遊んでいます。この奇妙なダイナミックな "ラッパー"アイデアは、私が必要とする方法(シリアル化可能なものなど)でBrianが可能であるか?

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

.NET 4の場合、 'dynamic'オブジェクトに逆シリアル化でき、必要なプロパティに明示的にアクセスできるようにすることを前提としています。 – sll

+2

どのオブジェクトがどのパラメータを持っているか、持ってる? – KallDrexx

+0

@sll:例がありますか?動的な型に対してではありません。私は時折それらを使用しています。その場合、私の次の質問は、どのように動的からanon型に変換するのだろう。パフォーマンスは問題ではないので、いずれのパスでもうれしいですが、この場合は既存のライブラリーでは無名型が必要です。 – sgtz

答えて

6

あなたはExpandoObjectConverterを使用してExpandoObjectにJSON.NETにデシリアライズすることができます。

実行時に匿名型を作成するには、そのかなりより複雑に、フープを見ては、このスレッドに貫通飛び降り:あなたが努力のかなりを見ることができるように

How to create LINQ Expression Tree to select an anonymous type

ことおそらくコンパイル時の安全性を得ることはできないので、おそらくその価値はありません。だからdynamicまたはExpandoObjectがあなたのベストベットです。

+1

リンク可能なExpandoObjectConverterの使用例がありますか? – sgtz

関連する問題