powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / superobject: как получить JSON-значение, имя которого содержит тире?
7 сообщений из 7, страница 1 из 1
superobject: как получить JSON-значение, имя которого содержит тире?
    #40020067
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая функция есть

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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 содержит что-то вроде

Код: javascript
1.
2.
3.
{
  "not-before-policy":0,
}






When a movie is over, it's a black
...
Рейтинг: 0 / 0
superobject: как получить JSON-значение, имя которого содержит тире?
    #40020069
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
только что делать если JSON содержит что-то вроде
У себя в фреймворке я делал так
Код: pascal
1.
2.
3.
4.
5.
6.
TMyRec = record
  [TJsonField]
  field: string;
  [TJsonField('is-not-possible')]
  field2: string;
end;

Сериализуется/десериализуется в такое
Код: javascript
1.
{"field":"value1", "is-not-possible": "value2"}

Может и SuperObject так умеет?
...
Рейтинг: 0 / 0
superobject: как получить JSON-значение, имя которого содержит тире?
    #40020099
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оффтоп
безотносительно делфи
да, с точки зрения стандарта имя - любая валидная строка, наверное, в каждом языке можно найти варианты работать с такими ключами, но мне кажется для тех кто придумывает такие имена в аду должен быть отдельный котел
...
Рейтинг: 0 / 0
superobject: как получить JSON-значение, имя которого содержит тире?
    #40020117
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Квейд
только что делать если JSON содержит что-то вроде
У себя в фреймворке я делал так
Код: pascal
1.
2.
3.
4.
5.
6.
TMyRec = record
  [TJsonField]
  field: string;
  [TJsonField('is-not-possible')]
  field2: string;
end;

Сериализуется/десериализуется в такое
Код: javascript
1.
{"field":"value1", "is-not-possible": "value2"}



это встроенными средствами делается или сторонние надо ставить?
можн пример?
...
Рейтинг: 0 / 0
superobject: как получить JSON-значение, имя которого содержит тире?
    #40020123
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
это встроенными средствами делается или сторонние надо ставить?
Это моя обвязка над System.Json
Квейд
можн пример?
Пример чего?
...
Рейтинг: 0 / 0
superobject: как получить JSON-значение, имя которого содержит тире?
    #40020145
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Квейд
это встроенными средствами делается или сторонние надо ставить?
Это моя обвязка над System.Json
Квейд
можн пример?
Пример чего?


JSON в record с атрибутами [TJsonField]
...
Рейтинг: 0 / 0
superobject: как получить JSON-значение, имя которого содержит тире?
    #40020244
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

Вот этот вроде умеет.
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:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
    TOrder = record
    public
      [BsonElement('customer_name')]
      CustomerName: String;

      [BsonElement('$id')]
      Id: TgoObjectId;
    end;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / superobject: как получить JSON-значение, имя которого содержит тире?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]