Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 superobject: как получить JSON-значение, имя которого содержит тире?  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5379
Вот такая функция есть

+
class function TJsonUtils.UnMarshal<T>(const AResponse: string): T;
var
  Context: TSuperRttiContext;
  Value: TValue;
begin
  if not AResponse.IsEmpty then
  begin
    Context := TSuperRttiContext.Create;
    try
      if Context.FromJson(TypeInfo(T), SuperObject.SO(AResponse), Value) then
        Result := Value.AsType<T>
      else
        raise EMarshallingError.Create('Marshalling error')
    finally
      FreeAndNil(Context);
    end;
  end
  else
    Result := Default(T);
end;



Она десериализует JSON-структуру в <T>, все отлично, только что делать если JSON содержит что-то вроде

{
  "not-before-policy":0,
}





When a movie is over, it's a black
18 ноя 20, 18:07    [22234820]     Ответить | Цитировать Сообщить модератору
 Re: superobject: как получить JSON-значение, имя которого содержит тире?  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12319
Квейд
только что делать если JSON содержит что-то вроде
У себя в фреймворке я делал так
TMyRec = record
  [TJsonField]
  field: string;
  [TJsonField('is-not-possible')]
  field2: string;
end;
Сериализуется/десериализуется в такое
{"field":"value1", "is-not-possible": "value2"}
Может и SuperObject так умеет?

Сообщение было отредактировано: 18 ноя 20, 18:13
18 ноя 20, 18:18    [22234824]     Ответить | Цитировать Сообщить модератору
 Re: superobject: как получить JSON-значение, имя которого содержит тире?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1975
оффтоп
безотносительно делфи
да, с точки зрения стандарта имя - любая валидная строка, наверное, в каждом языке можно найти варианты работать с такими ключами, но мне кажется для тех кто придумывает такие имена в аду должен быть отдельный котел
18 ноя 20, 19:40    [22234883]     Ответить | Цитировать Сообщить модератору
 Re: superobject: как получить JSON-значение, имя которого содержит тире?  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5379
_Vasilisk_
Квейд
только что делать если JSON содержит что-то вроде
У себя в фреймворке я делал так
TMyRec = record
  [TJsonField]
  field: string;
  [TJsonField('is-not-possible')]
  field2: string;
end;
Сериализуется/десериализуется в такое
{"field":"value1", "is-not-possible": "value2"}


это встроенными средствами делается или сторонние надо ставить?
можн пример?
18 ноя 20, 20:15    [22234908]     Ответить | Цитировать Сообщить модератору
 Re: superobject: как получить JSON-значение, имя которого содержит тире?  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12319
Квейд
это встроенными средствами делается или сторонние надо ставить?
Это моя обвязка над System.Json
Квейд
можн пример?
Пример чего?
18 ноя 20, 20:31    [22234919]     Ответить | Цитировать Сообщить модератору
 Re: superobject: как получить JSON-значение, имя которого содержит тире?  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5379
_Vasilisk_
Квейд
это встроенными средствами делается или сторонние надо ставить?
Это моя обвязка над System.Json
Квейд
можн пример?
Пример чего?


JSON в record с атрибутами [TJsonField]
18 ноя 20, 22:04    [22234957]     Ответить | Цитировать Сообщить модератору
 Re: superobject: как получить JSON-значение, имя которого содержит тире?  [new]
alekcvp
Member

Откуда:
Сообщений: 2494
Квейд,

Вот этот вроде умеет.
Also, you may wish to serialize a member using a different name than the member name. A common use for this is if you want to serialize using a C-style name (lower case with underscores) but you would like the member to have a Pascal-style name (with camel caps). Another situation where you may want to use this is if the serialization name includes a character that is invalid in a Delphi identifier. You can use the BsonElement attribute to provide the serialization name:
    TOrder = record
    public
      [BsonElement('customer_name')]
      CustomerName: String;

      [BsonElement('$id')]
      Id: TgoObjectId;
    end;


Сообщение было отредактировано: 19 ноя 20, 10:12
19 ноя 20, 10:17    [22235119]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить