Десериализация в dynamic .net core 3.0

156
23 декабря 2021, 15:50

Есть необходимость получить объект типа dynamic из Json на .NET Core 3.0:

{
    "Name": "Bob",
    "Age": 22
}
dynamic obj = someJsonSer.Deserialize(JsonDataString);
obj.Name; //Bob
obj.Age; //22

Близкое по смыслу - JsonDocument (System.Text.Json), но это не совсем то:

using(var jDoc = JsonDocument.Parse(response_string))
{
    string foo = jDoc.RootElement.GetProperty("Name").GetString();//Bob
}

Json.NET - вариант не желательный.

Какие возможные опции в этой ситуации?

Answer 1

Как я понимаю, во втором примере вас не устраивает то, что вам приходится работать, вызывая различные методы.

В таком случае, вы можете создать класс-наследник от ExpandoObject, в котором прописать всю необходимую логику поиска свойств в JsonDocument.

По моему, по другому никак.

Влез ради интереса в исходники Dapper, что бы посмотреть, как он работает если тип неизвестен и там если вызываешь Qyery, то dapper все кладет в DapperRow : System.Dynamic.IDynamicMetaObjectProvider=> по сути-это то, что я и посоветовал сверху.

В JSON.NET, как я понимаю, поддержка dynamic есть из "коробки":

dynamic d = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");
Console.WriteLine(d.number);
Console.WriteLine(d.str);
Console.WriteLine(d.array.Count);
READ ALSO
ObservableCoolection RemoveAt

ObservableCoolection RemoveAt

Проблема в том что DataGrid после удаления из коллекции (ObservableCollection) какого то слова, в DataGrid коллекция остается не измененнымРаботает в другом...

108
Непонятная ошибка выдаваемая phpstan-ом

Непонятная ошибка выдаваемая phpstan-ом

Решил я подключить к своему проекту на PHP 74 phpstan

138
Вопрос по поведению current() в PHP

Вопрос по поведению current() в PHP

Имеем простой код:

192