RavenDB: Как предотвратить сохранение $ type в типизированное свойство Dynami c? - PullRequest
2 голосов
/ 30 апреля 2020

Есть ли способ предотвратить добавление свойства $type при сохранении значений типа Dynami c?

Когда я сохраняю это:

new Activity {
    Name = "FormFieldDeleted",
    Body =  new {
        MyDeletedFormField(),
        MyCompleteForm()
    }
}

Я получаю это

<>f__AnonymousType1`2[[MyProject.Domains.Forms.Models.FormField, MyProject.Domains.Forms],[MyProject.Domains.Forms.Entities.FormRegistration, MyProject.Domains.Forms]], MyProject.Api.Forms

Но когда я пытаюсь получить эту сохраненную сущность, она вылетает, за исключением ниже. Я знаю, что в нем отсутствует ссылка на проект, но я действительно не хочу добавлять эту ссылку (я не хочу ссылаться на API из консольного приложения). Для меня лучше просто запретить свойство $type.

/usr/local/share/dotnet/dotnet path/MyProject/MyProject/src/MyProject.Tasks.MapActivities/bin/Debug/netcoreapp3.1/MyProject.Tasks.MapActivities.dll
Unhandled exception. System.InvalidOperationException: Could not convert document 31317d58-db9e-4f60-8dee-b8593f3e06c0 to entity of type MyProject.Domains.Core.Entities.Activity
 ---> Newtonsoft.Json.JsonSerializationException: Error resolving type specified in JSON '<>f__AnonymousType1`2[[MyProject.Domains.Forms.Models.FormField, MyProject.Domains.Forms],[MyProject.Domains.Forms.Entities.FormRegistration, MyProject.Domains.Forms]], MyProject.Api.Forms'. Path 'Body.$type'.
 ---> Newtonsoft.Json.JsonSerializationException: Could not load assembly 'MyProject.Api.Forms'
....

1 Ответ

3 голосов
/ 02 мая 2020

Да, есть способ.
Вы можете настроить способ работы сериализации, используя следующий код:

store.Conventions.CustomizeJsonSerializer = serializer =>
{
   serializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.None;
};

В качестве примера рассмотрим код здесь: https://dotnetfiddle.net/voJ7US

Если вы выполните код в dotnetfiddle , вы можете увидеть результаты здесь: http://live-test.ravendb.net/studio/index.html#databases / documents? Collection = Деятельность и база данных = UniqueTestDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...