Выбрать тип объекта из json?

#c# #json #rest

#c# #json #отдых

Вопрос:

У меня проблема с правильным синтаксическим анализом объекта из json-запроса. Я кое-что читал о JObject. Теперь у меня есть две модели, например, такие, как Car и MotorBike . Результатом запроса является:

 "Vehicles": 
 [
        {
            "Id": 1,
            "title": "test",
            "price": "4000",
            "type": "Car"
        },
        {
            "Id": 1,
            "title": "test",
            "price": "4000",
            "drivingLicenseCat" "A",
            "type": "MotorBike"
        }
    ]
 

как я могу выполнить синтаксический анализ для пользовательской модели с помощью type

Комментарии:

1. Отправленный JSON имеет только один тип: Vehicle with (sub) Type является простым свойством Vehicle

2. подготовьте свою модель, соответствующую каждому элементу в массиве, проанализируйте список таких элементов. наконец, отфильтруйте элементы нужного типа. Я не вижу смысла пытаться анализировать только элементы некоторого желаемого типа. Сначала проанализируйте все и отфильтруйте нужные элементы (по типу).

Ответ №1:

Насколько у вас есть контроль над JSON? Если вы правильно генерируете JSON, скажем, из веб-api, он будет выглядеть примерно так:

 "Vehicles": 
 [
        {
            "Id": 1,
            "title": "test",
            "price": "4000",
            "$type": "YourNamespace.Car, YourNamespace"
        },
        {
            "Id": 1,
            "title": "test",
            "price": "4000",
            "drivingLicenseCat" "A",
            "$type": "YourNamespace.MotorBike, YourNamespace"
        }
    ]
 

и тогда он будет автоматически десериализован, когда вы его введете…

Убедитесь, что в модели, которую вы сериализуете и отправляете в формате JSON, вы пометили ее следующим образом:

 [JsonProperty(ItemTypeNameHandling = TypeNameHandling.All)]
 

Это добавит имена типов к объектам по мере их сериализации. Я должен также отметить, что это связано с Newtonsoft в качестве вашей библиотеки Json. Я не уверен насчет встроенного Json.