Где задается сериализатор класса System.Version?
От: VladCore  
Дата: 20.06.21 19:05
Оценка:
Дурацкий конечно вопрос.

Но многие сталкивались уверен.

Обновил значит ASP.NET Core с 2.2 (там newtonsoft json гвоздями прибит я непомню точно) на 3.1 (newtonsoft явно задается, а по дефолту System.Text.Json)

Вот так:
services.AddControllersWithViews().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});

var signalR = services.AddSignalR(x =>
{
    x.EnableDetailedErrors = true;
});

signalR.AddNewtonsoftJsonProtocol(options =>
{
    options.PayloadSerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});


Все прекрасно работает, но памяти больше жрет. А самое интересное что свойства System.Version в 2.2 сераилизовывались как object из Major Minor Build и т.д.
А в 3.1 — это строка "1.2.3"

Чесно говоря хочется разобраться почему так странно
Re: Где задается сериализатор класса System.Version?
От: ksg71 Германия  
Дата: 21.06.21 10:10
Оценка: 16 (2)
Здравствуйте, VladCore, Вы писали:

VC>Дурацкий конечно вопрос.


VC>Но многие сталкивались уверен.



VC>Чесно говоря хочется разобраться почему так странно


не это часом?
https://github.com/JamesNK/Newtonsoft.Json/issues/2243
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[2]: Где задается сериализатор класса System.Version?
От: VladCore  
Дата: 21.06.21 14:40
Оценка:
Здравствуйте, ksg71, Вы писали:

VC>>Дурацкий конечно вопрос.


VC>>Но многие сталкивались уверен.



VC>>Чесно говоря хочется разобраться почему так странно


K>не это часом?

K>https://github.com/JamesNK/Newtonsoft.Json/issues/2243

ну да оно. только все равно непонятно. Этот VersionConverter лежит в сборке Newtonsoft.Json, которая и в core 2.2 тоже была но не использовалась почему то.
Re[3]: Где задается сериализатор класса System.Version?
От: ksg71 Германия  
Дата: 21.06.21 16:44
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, ksg71, Вы писали:


VC>>>Дурацкий конечно вопрос.


VC>>>Но многие сталкивались уверен.



VC>>>Чесно говоря хочется разобраться почему так странно


K>>не это часом?

K>>https://github.com/JamesNK/Newtonsoft.Json/issues/2243

VC>ну да оно. только все равно непонятно. Этот VersionConverter лежит в сборке Newtonsoft.Json, которая и в core 2.2 тоже была но не использовалась почему то.



Так это TypeConverter из System.ComponentModel. Он появился видимо в 3.1 для Version
Вот тут https://www.newtonsoft.com/json/help/html/SerializationGuide.htm
написано почему он и цепляется
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[4]: Где задается сериализатор класса System.Version?
От: VladCore  
Дата: 22.06.21 06:32
Оценка:
Здравствуйте, ksg71, Вы писали:

K>Так это TypeConverter из System.ComponentModel. Он появился видимо в 3.1 для Version


а мы про JsonConverter

K>Вот тут https://www.newtonsoft.com/json/help/html/SerializationGuide.htm

K>написано почему он и цепляется

ты читал что там написано?

ну и тему посмотри

Где задается сериализатор класса System.Version?


Подсказка — VersionConverter он вызывается либо если атрибут прописан либо если JsonSerializer.Converters.Add() вызвать.
Re[5]: Где задается сериализатор класса System.Version?
От: ksg71 Германия  
Дата: 22.06.21 09:20
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, ksg71, Вы писали:


K>>Так это TypeConverter из System.ComponentModel. Он появился видимо в 3.1 для Version


VC>а мы про JsonConverter


K>>Вот тут https://www.newtonsoft.com/json/help/html/SerializationGuide.htm

K>>написано почему он и цепляется

VC>ты читал что там написано?


VC>ну и тему посмотри

VC>

VC>Где задается сериализатор класса System.Version?


VC>Подсказка — VersionConverter он вызывается либо если атрибут прописан либо если JsonSerializer.Converters.Add() вызвать.



читал.
там сказано что newtonsoft json использует TypeConverter для примитивов,
конвертеры для них и intrinsic типов задаются в ReflectTypeDescriptorProvider
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.