utf8 json десериализация до нескольких типов на основе поля маркера, которое не идет первым - PullRequest
0 голосов
/ 13 июля 2020

У меня есть следующие данные:

В отличие от аналогичного вопроса здесь: Utf8 Json десериализация для ввода на основе поля маркера веб-служба не возвращает поле маркера (в ниже случай primaryExch) в качестве первого элемента.

По сути, я хотел бы utf8 json декодировать данные в следующее:

[
  {
    "ticker": "AAPL",
    "name": "Apple Inc.",
    "market": "STOCKS",
    "locale": "US",
    "currency": "USD",
    "active": true,
    "primaryExch": "NGS",
    "type": "cs",
    "codes": {
      "cik": "0000320193",
      "figiuid": "EQ0010169500001000",
      "scfigi": "BBG001S5N8V8",
      "cfigi": "BBG000B9XRY4",
      "figi": "BBG000B9Y5X2"
    },
    "updated": "2019-01-15T05:21:28.437Z",
    "url": "https://api.polygon.io/v2/reference/tickers/AAPL"
  },
  {
    "ticker": "$AEDAUD",
    "name": "United Arab Emirates dirham - Australian dollar",
    "market": "FX",
    "locale": "G",
    "currency": "AUD",
    "active": true,
    "primaryExch": "FX",
    "updated": "2019-01-25T00:00:00.000Z",
    "attrs": {
      "currencyName": "Australian dollar,",
      "currency": "AUD,",
      "baseName": "United Arab Emirates dirham,",
      "base": "AED"
    },
    "url": "https://api.polygon.io/v2/tickers/$AEDAUD"
  },
  { /* another stock */ },
  { /* another stock */ },
  { /* another FX*/ },
  { /* another stock */ },
  { /* another FX*/ }
  /* and so forth */
]

Свойство URL-адреса базового типа hte и currencyName и baseName типа FX можно пропустить, поскольку они не требуются.

В следующий результат:

class Response
{
   List<Stocks> Stocks{ get; set; }
   List<ForeignExchange> ForeignExchange { get; set; }
}

Я бы тоже согласился со списком базовых типов List<Ticker> возвращается:

class Ticker {string Ticker {get; set;} строка Имя {получить; установить;} MarketEnum Market {получить; set;} LocaleEnum Locale {получить; set;} CurrencyEnum Currency {получить; set;} bool Active {получить; set;} PrimaryExchEnum PrimaryExch {получить; set;} DateTimeOffset Обновлено {get; set;}}

class Stock : Ticker
{
  int Type {get; set;}
  string CIK {get; set;}
  string FIGIUID {get; set;}
  string SCFIGI {get; set;}
  string CFIGI {get; set;}
  string FIGI {get; set;}
}

class ForeignExchange : Ticker
{
   BaseCurrencyEnum BaseCurrency {get; set;}
}

Я вижу, как это делается в JSON. net согласно . NET Десериализация JSON на несколько типов , но после utf8 json для скорости, но в идеале без стеков низкоуровневого кода десериализации.

Согласно моей исходной ссылке, Utf8 Json десериализовать на тип на основе поля маркера Я не могу используйте поле маркера, поскольку оно не является первым, и вы не знаете, как эффективно справиться с этим сценарием. .

Также я не уверен, как сгладить массивы codes и attr.

Любые указатели очень ценятся.

...