Making Json.NET + MongoDB Bson play nice together(让Json.NET+MongoDB bson和睦相处)
本文介绍了让Json.NET+MongoDB bson和睦相处的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将一些Json.NET JSON序列化与MongoDB结合起来。 我有一个类似于此的结构:
public class Master {
...props...
public Detail[] Details {get;set;}
}
public class Detail {
...props...
public dynamic Value {get;set;}
}
在本例中,我希望Detail
的Value
属性包含动态json。没有模式,我只想存储其中的任何内容。
如果我通过ASP.NET接收此结构,如果值不是基元(如string
、bool
等),则Value属性将反序列化为JObject
。
将其存储到MongoDB中将导致Value属性保存为JObject
。我只想将其存储为Value Prop的原始json结构。
有从JObject
到BsonDocument
的方法。例如var doc = BsonDocument.Parse(jobj.ToString());
。
但在这种情况下,我将不得不遍历对象结构并手动完成此操作。
(我的真实结构也更复杂)
我现在在想,也许有更好的方法来处理这件事? 例如,以某种方式将某种转换器附加到Value属性,以便Mongo驱动程序知道如何将其转换为正确的BSON。
我在这里有哪些选择? 我认为这需要在BSON串行化结束时以某种方式完成?
推荐答案
是,需要显式实现JObject
和BsonDocument
类型之间的转换。您可以实现自己的转换器并使用属性来避免遍历C#类型结构。尝试:
public class Detail
{
[BsonSerializer(typeof(DynamicSerializer))]
public dynamic Value { get; set; }
}
public class DynamicSerializer : SerializerBase<dynamic>
{
public override dynamic Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var myBSONDoc = BsonDocumentSerializer.Instance.Deserialize(context);
return (dynamic)JObject.Parse(context.ToString());
}
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, dynamic value)
{
var bson = MongoDB.Bson.BsonDocument.Parse(value.ToString());
BsonDocumentSerializer.Instance.Serialize(context, args, bson);
}
}
这篇关于让Json.NET+MongoDB bson和睦相处的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:让Json.NET+MongoDB bson和睦相处


猜你喜欢
- 在 LINQ to SQL 中使用 contains() 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- 使用 rss + c# 2022-01-01