JsonConverter в поле типа F # не вызывается - PullRequest
1 голос
/ 06 марта 2020

Для кода ниже

type MyConverter =
    inherit JsonConverter<Datetime>()

    .....

type MyType = {
    [<JsonConverter(typeof<MyConverter>)>]
    date: DateTime
}

JsonSerializer.Deserialize("{\"date\": \"2020-10-20\"}", typeof<MyType>)

преобразователь не вызывается. Он вызывается для всего типа, если атрибут будет перемещен туда, но не для поля.

Это задумано? Есть ли возможность указать конвертер для точного поля?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

После всех обсуждений мы решили использовать комбинацию таких решений:

  1. Использовать глобальные конвертеры, подобные this

  2. Изменить Запись преобразователя, который распознает атрибут JsonConverter и использует его для преобразования значения поля

0 голосов
/ 03 апреля 2020

Кажется, есть два способа определить тип записи, чтобы заставить это работать

[<CLIMutable>]
type MyType = {
    [<JsonConverter(typeof<MyConverter>)>]
    date: DateTime
}

или

[<Struct>]
type MyType = {
    [<JsonConverter(typeof<MyConverter>)>]
    mutable date: DateTime
}
...