c# - RavenDB:如何防止 $type 被保存到动态类型属性?
问题描述
$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'
....
解决方案
是的,有办法。
您可以使用以下代码自定义序列化的工作方式:
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
推荐阅读
- clojure - 您如何在 clojure ring 服务器中提供动态创建的文件?
- javascript - myFunction 未在 Javascript 中定义
- python - 我有一个字节数组的字符串表示,但我需要原始字节表示
- python - 根据数组索引绘制 y 坐标的二维数组
- python - 如何使用 Telethon 将图像下载到我的本地 PC
- kotlin - 使用 Room 自动生成主键不起作用
- c - C程序显示罗马数字直到n
- python - 使用python查找列表给定部分中最大数字的索引
- javascript - 如何设置 VueJS 路由和 NodeJS Express API 路由?
- node.js - 使用JS在mongo中复合搜索条件