C# RavenDB:如何防止$type保存到动态类型属性?
在保存动态类型值时,是否有方法防止添加C# RavenDB:如何防止$type保存到动态类型属性?,c#,dynamic,ravendb,ravendb4,C#,Dynamic,Ravendb,Ravendb4,在保存动态类型值时,是否有方法防止添加$type属性 当我保存此文件时: new Activity { Name = "FormFieldDeleted", Body = new { MyDeletedFormField(), MyCompleteForm() } } 我明白了 <>f__AnonymousType1`2[[MyProject.Domains.Forms.Models.FormField, MyProject
$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
是的,有办法。您可以使用以下代码自定义序列化的工作方式:
store.Conventions.CustomizeJsonSerializer=serializer=>
{
serializer.TypeNameHandling=Newtonsoft.Json.TypeNameHandling.None;
};
作为一个例子,请看下面的代码:
如果您在dotnetfiddle上执行代码,您可以在这里看到结果:对于RavenDB 5及更高版本,它有一点变化
var store = DocumentStore
{
Urls = new[] { "your-endpoint" },
Conventions = new DocumentConventions
{
Serialization = new NewtonsoftJsonSerializationConventions
{
CustomizeJsonSerializer = serializer =>
{
serializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.None;
}
}
}
}.Initialize();
有关更多信息,请参阅。啊,太好了!谢谢你的解决方案。您知道这是否有任何缺点吗?据我所知,通常使用“无”-其他设置是外部接收数据的安全代码气味。请注意,在RavenDB 4.x中,服务器端根本不使用$type,因为在服务器上,json是用自定义json序列化程序反序列化的,而不是Newtonsoft.json(请参阅)谢谢您的反馈,非常感谢!保存类型在继承时很有用,否则Newtonsoft将无法自动反序列化类型。这是一个比文档提供的更好的示例:)
var store = DocumentStore
{
Urls = new[] { "your-endpoint" },
Conventions = new DocumentConventions
{
Serialization = new NewtonsoftJsonSerializationConventions
{
CustomizeJsonSerializer = serializer =>
{
serializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.None;
}
}
}
}.Initialize();