簡體   English   中英

如何使用JSON.Net反序列化為匿名類型?

[英]How to deserialize using JSON.Net to an anonymous type?

只是嘗試從JSON創建一個匿名類型,而不必提前了解任何參數,並完全解釋它們(可能帶有提示)。 即該值“看起來”像int,string或date。

到目前為止,我所知道的唯一方法是創建一個你已經知道的匿名類型。 請參閱下面的.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並且正在玩它。 這種奇怪的動態“包裝”理念是否能夠以我需要的方式(可序列化等)實現?

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

您可以JSON.NET反序列化到ExpandoObject使用ExpandoObjectConverter

要在運行時創建一個匿名類型,它要復雜得多,看看在這個線程中跳過的箍:

如何創建LINQ表達式樹以選擇匿名類型

你可以看到相當多的努力可能是不值得的,因為你仍然不會得到任何編譯時間安全。 所以動態或ExpandoObject是你最好的賭注。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM