Замена System.Text. Json на Manatee. Json для сериализации в. NET Core 3 - PullRequest
0 голосов
/ 22 января 2020

Фон
Я хочу предоставить JsonSchema из моего приложения. NET Core 3, а также другие объекты, сериализованные в JSON. Поскольку Manatee. Json часто обновляется и обеспечивает хорошую поддержку JsonSchema, они - мой предпочтительный выбор. В то же время. NET Core 3 обеспечивает отличную поддержку для возврата объектов с магией c, которые преобразуют их в JSON документы.

Пример:

public ActionResult<MyFancyClass> MyFancyAction()
{
    return new MyFancyClass {
        Property1 = "property 1 content",
        Property2 = "property 2 content",
    };
}

Вывод:

{
    "Property1": "property 1 content",
    "Property2": "property 2 content"
}

Проблема
. NET Core 3 имеет внутреннюю поддержку JSON с его System.Text.Json, который используется в предыдущем примере. Если я попытаюсь сериализовать Manatee.Json.Schema.JsonSchema, его внутренняя структура сериализуется, а не сама схема json.

Пример:

public ActionResult<MyFancyClass2> MyFancyAction2()
{
    return new MyFancyClass2 {
        Property1 = "property 1 content",
        Property1Schema = new JsonSchema()
            .Type(JsonSchemaType.String)
    };
}

Вывод:

{
  "Property1": "property 1 content",
  "Property1Schema": [{
    "name":"type",
    "supportedVersions":15,
    "validationSequence":1,
    "vocabulary": {
      "id":"https://json-schema.org/draft/2019-09/vocab/validation",
      "metaSchemaId":"https://json-schema.org/draft/2019-09/meta/validation"
    }
  }]
}

Я ожидаю, что:

{
  "Property1": "property 1 content",
  "Property1Schema": {
    "type": "string",
  }
}

Manatee.Json.JsonValue также имеют конфликтующую внутреннюю структуру, где System.Text.Json.JsonSerializer не может правильно получить доступ к внутренним методам get, и я получаю, например, это сообщение об исключении:

Cannot access value of type Object as type Boolean.

Discovery
Manatee.Json.Schema.JsonSchema имеет метод .ToJson(), который можно использовать для получения правильной схемы json в виде JsonValue, но затем я получаю проблему, с которой я только что упомянул сериализация Manatee.Json.JsonValue.

Вопрос
Кто-нибудь знает способ изменить сериализацию по умолчанию в. NET Core 3 с использования System.Text.Json на использование Manatee.Json?

Sidemark
Другим способом продвижения вперед является включение System.Text.Json для сериализации Manatee.Json структур (взгляните на этот вопрос ).

...