Подтвердить что ты не робот

Как десериализовать с помощью JSON.Net анонимного типа?

Просто пытаюсь создать анонимный тип из 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

4b9b3361

Ответ 1

Вы можете десериализовать с помощью JSON.NET ExpandoObject, используя ExpandoObjectConverter.

Чтобы создать анонимный тип во время выполнения, его немного сложнее, посмотрите на обручи, пробитые в этом потоке:

Как создать дерево выражений LINQ, чтобы выбрать анонимный тип

Как вы можете видеть довольно много усилий, которые, вероятно, не стоят того, что вы еще не получите никакой безопасности времени компиляции. Так что dynamic или ExpandoObject - ваши лучшие ставки.