JToken和BsonValue对象的相互转换
2024-10-16 16:38:44
/// <summary>
/// JObject和BsonValue之间的
/// </summary>
public static class AdapterExtensions
{
/// <summary>
///
/// </summary>
/// <param name="object"></param>
/// <returns></returns>
public static BsonDocument ToBsonDocument(this JObject @object)
{
IDictionary<String, Object> elems = new Dictionary<String, Object>(); ;
foreach (var item in @object)
elems[item.Key] = ToBsonValue(item.Value);
return new BsonDocument(elems);
}
public static BsonArray ToBsonArray(this JArray array)
{
IList<BsonValue> bvs = new List<BsonValue>();
foreach (JToken item in array)
bvs.Add(ToBsonValue(item));
return new BsonArray(bvs);
}
private static BsonValue ToBsonValue(this JToken val)
{
if (val is JArray)
return ToBsonArray(val as JArray);
if (val is JObject)
return ToBsonDocument(val as JObject);
else
return ToBasicValue(val);
}
private static BsonValue ToBasicValue(JToken @object)
{
switch (@object.Type)
{
case JTokenType.Integer:
return BsonValue.Create(@object.ToObject<Int32>());
case JTokenType.Float:
return BsonValue.Create(@object.ToObject<float>());
case JTokenType.String:
return BsonValue.Create(@object.ToObject<String>());
case JTokenType.Boolean:
return BsonValue.Create(@object.ToObject<Boolean>());
case JTokenType.Date:
return BsonValue.Create(@object.ToObject<DateTime>());
case JTokenType.Guid:
return BsonValue.Create(@object.ToObject<Guid>());
case JTokenType.Null:
return null;
default:
throw new Exception("");
}
}
public static JObject ToJObject(this BsonDocument bsonDocument)
{
JObject elems = new JObject();
foreach (var item in bsonDocument)
{
Object data = item.Value;
elems[item.Name] = ToJsonValue(item.Value);
}
return elems;
}
public static JArray ToJArray(this BsonArray array)
{
IList<JToken> bvs = new List<JToken>();
foreach (var item in array)
bvs.Add(ToJsonValue(item));
return new JArray(bvs);
}
private static JToken ToJsonValue(this BsonValue val)
{
if (val is BsonArray)
return ToJArray(val as BsonArray);
if (val is BsonDocument)
return ToJObject(val as BsonDocument);
if (val is BsonNull)
return null;
return JToken.FromObject(val);
}
}
最新文章
- ios bitcode 机制对 dsym 调试文件的影响
- css3颜色
- 第三十八章 springboot+docker(maven)
- (译)JavaScript内存泄露
- 【查找结构5】多路查找树/B~树/B+树
- Trace和Debug主要用法
- SQL几个有点偏的语句
- css.day04
- Eclipse用法和技巧十三:自动生成的TODO注释1
- BPL vs. DLL
- es6的新内容
- [BZOJ]1093 最大半连通子图(ZJOI2007)
- 了解PID控制
- maven无法下依赖jar文件的解决方案
- vue中动态样式不起作用? scoped了解一下
- [MapReduce_5] MapReduce 中的 Combiner 组件应用
- MySQL 基础 简单操作
- node-webkit开发桌面应用
- C#代码优化—字符串拼接效率比较
- Mongo 后台加索引踩坑
热门文章
- Cocos Creator—最佳构建部署实践
- Cocos Creator—优化首页打开速度
- ReactNative之从“拉皮条”来看RN中的Spring动画
- [AI开发]centOS7.5上基于keras/tensorflow深度学习环境搭建
- C# 定时关机小程序
- [SpringBoot guides系列翻译]调用RESTfulWebService
- celery异步消息处理框架
- WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary)
- Java开发笔记(八十三)利用注解技术检查空指针
- easyui表格排序