反序列化json字符串为对象,怎么忽略根节点?

问题描述

json字符串:{"root":[{"name":"名字1","id":1},{"name":"名字2","id":2}]}

类:publicclassCModel{publicstringname{get;set;}publicintid{get;set;}}

用DataContractJsonSerializer或Newtonsoft.Json反序列化,忽略根节点root反序列化为CModel[]数组,要怎么做?

解决方案

本帖最后由 newlju 于 2016-05-26 00:18:13 编辑
解决方案二:
遍历生成数组
解决方案三:
哪里有什么根节点?分明就是一个名字叫root的集合publicclassObjList{publicList<CModel>root{get;set;}}publicclassCModel{publicstringname{get;set;}publicintid{get;set;}}

解决方案四:
引用2楼xuanbg的回复:

哪里有什么根节点?分明就是一个名字叫root的集合publicclassObjList{publicList<CModel>root{get;set;}}publicclassCModel{publicstringname{get;set;}publicintid{get;set;}}

就是不想定义二个类,而且root的不固定.可能是root1也可能是base等等,我需要直接从序列化出根层后的内容
解决方案五:
头尾去掉不就行了intstart=json.IndexOf('[');intend=json.LastIndexOf(']');json=json.SubString(start,end-start+1);

解决方案六:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingNewtonsoft.Json;usingNewtonsoft.Json.Linq;usingSystem.Text.RegularExpressions;namespacejsonTest{classProgram{staticvoidMain(string[]args){//定义一个JSON字符串stringjsonText="{"root":[{"name":"名字1","id":1},{"name":"名字2","id":2}]}";//jsonText="[{'name':'名字1','id':1},{'name':'名字2','id':2}]";//这样的json也可以接受jsonText=Regex.Replace(jsonText,@".*([.+]).*",x=>x.Groups[1].Value);//用正则去掉数组外的内容//反序列化JSON字符串JArrayja=(JArray)JsonConvert.DeserializeObject(jsonText);foreach(varoinja)//o是JObject类型{Console.WriteLine("id:{0}name:{1}",o["id"],o["name"]);}Console.ReadKey();}}}

解决方案七:
引用4楼shingoscar的回复:

头尾去掉不就行了intstart=json.IndexOf('[');intend=json.LastIndexOf(']');json=json.SubString(start,end-start+1);

别瞎整啊。万一人家root里边也有数组,或者人家那么里边也有]符号怎么办呢?不能抠字眼儿的时候,千万不要用这种简单匹配字眼儿的做法。
解决方案八:
里边-->前边引用3楼newlju的回复:

就是不想定义二个类,而且root的不固定.可能是root1也可能是base等等,我需要直接从序列化出根层后的内容

如果你收到的数据根本没有模式,你怎么知道你的数组是在root还是root1里边呢?Newtonsoft可以反序列化为JObject、JArray等等token,具有一套.netjson模型类型。不过所谓灵活的json对象模式,应该只是用来处理它最合适做的事情。你不应该在你原本应该事先知道root还是root1的时候还假装不知道啊。
解决方案九:
或者人家那么里边也有]符号怎么办呢-->或者人家name字段里边也有]符号怎么办呢如果你需要自己进一步写解析程序,那么就是用灵活的json对象类型模式。如果你需要直接进行业务逻辑处理,那么就倾向于强类型地编程。一般来说,跟一个靠谱的软件公司合作搞开发,这个“根节点”的名字是不会随便改变其含义的,是会特意写文档、最先定义好的。
解决方案十:
不想额外定义一个封装类的话,就你的例子那你可以简单的用Dictionary<string,List<CModel>>来反序列化
解决方案十一:
引用6楼sp1234的回复:

Quote: 引用4楼shingoscar的回复:
头尾去掉不就行了intstart=json.IndexOf('[');intend=json.LastIndexOf(']');json=json.SubString(start,end-start+1);

别瞎整啊。万一人家root里边也有数组,或者人家那么里边也有]符号怎么办呢?不能抠字眼儿的时候,千万不要用这种简单匹配字眼儿的做法。

如果是root外面有数组你这样还好说,里面有又不影响end赋值用的是LastIndexOf,不是IndexOf
解决方案十二:
引用3楼newlju的回复:

Quote: 引用2楼xuanbg的回复:
哪里有什么根节点?分明就是一个名字叫root的集合publicclassObjList{publicList<CModel>root{get;set;}}publicclassCModel{publicstringname{get;set;}publicintid{get;set;}}

就是不想定义二个类,而且root的不固定.可能是root1也可能是base等等,我需要直接从序列化出根层后的内容

那你不如直接序列化成一个CModel集合好了,干嘛还要外面封个root呢?json又没有规定必须有根节点

时间: 2024-09-29 01:03:23

反序列化json字符串为对象,怎么忽略根节点?的相关文章

JSON字符串和对象之间的转换详解

  这篇文章主要介绍了JSON字符串和对象之间的转换详解,需要的朋友可以参考下 JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集.正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中. eval函数 JSON文本转换为对象 为了将JSON文本转换为对象,可以使用eval函数.eval函数调用JavaScript编辑器.由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象结构.文本必须括在括号

javascript 反序列化json字符串

JavaScript中如何反序列化json字符串呢? 有如下两种方法: (1)使用万能的eval Js代码   var jsonText = '{"name":"acwong","age":23,"address":{"province":"GuangDong","city":"GuangZhou"},"friends":[&q

jQuery解析Json字符串与对象的例子

 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,跟XML不相上下,在当今得到了广泛应用.有人说,当JS遇上Json,小JJ诞生啦:我说,当Json遇上xml,世界上又多了俩兄弟.近期看EasyUi视频里也全是Json作为前后台的数据交互,Json的有两种结构,分别是对象和数组: 1.对象:对象在js中表示为"{}"扩起来的内容,数据结构为: {key:value,key:value,-} 2.数

JSON字符串和对象之间的转换详解_json

JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集.正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中. eval函数 JSON文本转换为对象 为了将JSON文本转换为对象,可以使用eval函数.eval函数调用JavaScript编辑器.由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象结构.文本必须括在括号中避免产生JavaScript的语法歧义. var obj = eval('('

json字符串转对象很慢

问题描述 json字符串中的value值是这样得到的:是将图片通过Convert.ToBase64String(MyData)得到得,图片大小为400k,这样得到的字符串很长,Employeeemployee=(Employee)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(json,typeof(Employee));但执行上面一行代码时相当慢,请问有何优化的办法,谢谢!!! 解决方案 解决方案二:该回复于2016-03-28 00:0

json字符串转对象

问题描述 {"status":{"status_code":0,"status_reason":""},"result":{"items":[{"itemID":"1669769210","itemName":"LG香水身体乳","itemKdName":"LG香水身体乳&quo

SQL中采用Newtonsoft.Json处理json字符串

原文 SQL中采用Newtonsoft.Json处理json字符串 使用环境:       SQL Server2005;       VS2010;       关于SQL中部署CLR程序集的方法,网上一搜一大把,需要了解的自行查阅,呵呵.       SQL中处理字符串实在是太弱了,连数组都不能处理,就更别说json字符串了,好吧,它不能处理,我就给它加个处理程序集(还好2005已经加入了这个功能).       首先对于CLR我也不太懂,而且到现在我也没搞懂怎么把一个dll注册到SQL,俺

在MVC中使用Json.Net序列化和反序列化Json对象

在.Net的MVC开发中,经常会使用到Json对象,于是,系统提供了JsonResult这个对象,其本质是调用.Net系统自带的Json序列化类JavaScriptSerializer对数据对象进行序列化.但是这个系统自带的Json序列化对象方法没有Json.Net好用,于是打算有些时候用Json.Net替代默认的实现. 要实现有时候用Json.Net,有时候用默认实现,那么就要保证系统中两种实现并存.对于Server将对象序列化成Json传给Client很简单,我们只需要建立一个新的Actio

JS对象与json字符串格式转换实例_javascript技巧

本文实例讲述了JS对象与json字符串格式转换的实现方法,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     <title></title>     <script type="text/javascript"&g