$type
当我保存动态类型值时,有没有办法防止添加属性?
当我保存这个时:
new Activity {
Name = "FormFieldDeleted",
Body = new {
MyDeletedFormField(),
MyCompleteForm()
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了
<>f__AnonymousType1`2[[MyProject.Domains.Forms.Models.FormField, MyProject.Domains.Forms],[MyProject.Domains.Forms.Entities.FormRegistration, MyProject.Domains.Forms]], MyProject.Api.Forms
Run Code Online (Sandbox Code Playgroud)
但是当我尝试获取这个保存的实体时,它会崩溃并出现以下异常。我知道它缺少项目引用,但我真的不想添加该引用(我不想从控制台应用程序引用 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'
....
Run Code Online (Sandbox Code Playgroud) 我使用 NLOG 通过 JsonLayout 进行日志记录,并希望将这些日志存储在 RavenDB 4.0 中。基本上,我尝试使用 RavenDB .NET 客户端将原始 json 存储到 ravendb 中。
我在 RavenDB 3.5 中有一个可行的解决方案:使用继承自“RavenJObject”的类,但此功能在 4.0 中已被废弃。
我通过将 json 反序列化为动态并存储动态对象来使其工作。但这会将文档存储在无意义的“JObjects”集合中。将 json 转换为动态并再次转换回 json 似乎也有开销。
var obj = JsonConvert.DeserializeObject<dynamic>(jsonString);
session.Store(obj);
Run Code Online (Sandbox Code Playgroud)
我知道可以使用用户界面(raven studio)。但我找不到使用 .Net 客户端执行此操作的方法。
我认为也许可以使用 http api,使用原始 json 进行发布。但我还没有找到任何关于此的文档。
谁能帮帮我?任何建议表示赞赏!