Как заставить JsonConvert.DeserializeObject <T>() разбирать массив, когда я не всегда буду передавать ему массив? - PullRequest
2 голосов
/ 25 марта 2020

В моем приложении ASP. Net есть метод, который выглядит следующим образом:

Method1<T>(String inputString)
{
  return JsonConvert.DeserializeObject<T>(inputString);
}

Я передаю строковые объекты в Method1, и один из них является строковой версией этого объект:

obj1: {
  a: ...
  b: [...]
}

ie. obj1 - это объект, который имеет массив в качестве свойства. Теперь, как есть, JsonConvert.DeserializeObject<T>(inputString) не будет анализировать часть массива этого объекта. Из этого поста я узнал, что мог бы сделать эту работу, если бы type1 был типом obj1, и я сделал JsonConvert.DeserializeObject<type1>(inputString). Проблема в том, что я буду передавать строковые версии различных типов объектов в Method1, поэтому я не знаю, как это сделать, кроме как с <T>.

Кто-нибудь знает как я могу подойти к этому?

1 Ответ

1 голос
/ 25 марта 2020

Newtonsoft.Json.Linq API отлично подходит для такого сценария. Вы можете разобрать ваш json в абстрактный JToken объект и посмотреть на тип токена, чтобы определить, как извлечь ваш массив.

public MyType[] GetArrayFromJson(string json)
{
    var token = JToken.Parse(json);

    if (token.Type == JTokenType.Array)
    {
        return token.ToObject<MyType[]>();
    }
    else if(token.Type == JTokenType.Object)
    {
        return token["arrayPropName"].ToObject<MyType[]>();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...