RavenDB:如何防止$ type保存到动态类型的属性?

问题描述 投票:1回答:1

保存动态类型值时是否可以防止添加$type属性?

保存时:

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'
....
c# dynamic ravendb ravendb4
1个回答
0
投票

是的,有一种方法。您可以使用以下代码自定义序列化的工作方式:

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=Activities&database=UniqueTestDB

© www.soinside.com 2019 - 2024. All rights reserved.