JObject——转化为字典IDictionary<string, object>
来源:互联网 发布:石家庄那里淘宝拍图好 编辑:程序博客网 时间:2024/06/15 16:19
代码如下:
/// <summary> /// JObject扩展 /// </summary> public static class JObjectExtensions { /// <summary> /// 将JObject转化成字典 /// </summary> /// <param name="json"></param> /// <returns></returns> public static IDictionary<string, object> ToDictionary(this JToken json) { var propertyValuePairs = json.ToObject<Dictionary<string, object>>(); ProcessJObjectProperties(propertyValuePairs); ProcessJArrayProperties(propertyValuePairs); return propertyValuePairs; } private static void ProcessJObjectProperties(IDictionary<string, object> propertyValuePairs) { var objectPropertyNames = (from property in propertyValuePairs let propertyName = property.Key let value = property.Value where value is JObject select propertyName).ToList(); objectPropertyNames.ForEach(propertyName => propertyValuePairs[propertyName] = ToDictionary((JObject)propertyValuePairs[propertyName])); } private static void ProcessJArrayProperties(IDictionary<string, object> propertyValuePairs) { var arrayPropertyNames = (from property in propertyValuePairs let propertyName = property.Key let value = property.Value where value is JArray select propertyName).ToList(); arrayPropertyNames.ForEach(propertyName => propertyValuePairs[propertyName] = ToArray((JArray)propertyValuePairs[propertyName])); } /// <summary> /// /// </summary> /// <param name="array"></param> /// <returns></returns> public static object[] ToArray(this JArray array) { return array.ToObject<object[]>().Select(ProcessArrayEntry).ToArray(); } private static object ProcessArrayEntry(object value) { if (value is JObject) { return ToDictionary((JObject)value); } if (value is JArray) { return ToArray((JArray)value); } return value; } }
做以上处理 主要是Y因为
将JObject转化为字典对象,只会转化一级节点,更深的节点依旧为Jobject 或是 JArray对象。也就是说转化不彻底,不能达到目的。
这样Json数据 转化为 JObject 再转化为 /Dictionary<string, object>
就可以更加方便的对数据做处理
例如:
将接收到的JSON字符串转化为BsonDocument,存储到MongoDB数据库中。
可以使用
BsonDocument.Parse(json)
但是存在的问题是json中的数据是没有类型的,对于日期类型的值,就会以字符串的形式存储到数据库中,这就不符合要求。
因此只有将JSON字符串转成对应的对象,才可以有数据类型,以ISOdate类型将日期的值存储起来。
于是将 JSON=>Dictionary=>BsonDocument
JSON本身是一个JObject对象,需要做转化处理如上面的代码
private BsonDocument JsonConvertToBsonDoc(string json) { var token = JToken.Parse(json); var dict = token.ToDictionary(); return BsonDocument.Create(dict); }
尝试了很多种方法,如上终于解决,顺利将数据存储到MongoDB数据库中
0 0
- JObject——转化为字典IDictionary<string, object>
- JObject——直接转化为已知的对象类型
- Object[]数组转化为String[]
- c#——字典转化为对象(dictionary to object)
- 将Object对象转化为String的几种方法
- String[] Object类型转化
- 列表转化为字典
- 转化为object
- C# ——List<Enum> 转化为List<string>
- 把字典转化为对象
- 字典转化为 json 字符串
- JSON字符串转化为字典
- 字典,数组转化为JsonStr
- 将model转化为字典
- iOS 对象转化为字典
- string 转化为XML
- ByteBuffer 转化为 String
- string转化为inputstream
- c++ 引用
- CodeForces-747A
- 欢迎使用CSDN-markdown编辑器
- Java内存分配
- scons makefile比较
- JObject——转化为字典IDictionary<string, object>
- spring 定时任务cron在线表达式生成
- c++ assert() 使用方法
- 基于.NET平台常用的框架整理
- C# 文件与二进制流间的转换
- android写一个图片选择
- 数据重定向、管道及后台运行程序
- eclipse 启动过程(仅记录主要入口)
- 待解决的问题