`
北极的。鱼
  • 浏览: 158968 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C#解析Json的类

阅读更多

网上转的,自己没测试过。大家有好的方法请跟帖共享,最好是要自己测试过的。

 

现在json因为轻型,越来越流行,部门内部的数据标准趋向于json,所以开始学习。

本次工作内容是要将以下数据解析成.Net可以使用的数据,返回的数据除了header,其他的都是可变的,也就是说结构不是固定的。完全由用户选择,所以选择了生成DataTable。

Json数据格式如下:

 

{"dataSet":{
"header":{
    "returnCode":"0",
    "errorInfo":"HTTP请求错误",
    "version":"V1.0R010",
    "totalRows":"2000",
    "returnRows":"20"
},
"fieldDefine":{
    "assetId":"string",
    "serverIdcId":"int",
    "inputTime":"datetime"
},
"data":{"row":[
{
    "AssetId":"TCNS2006888",
    "ServerIdcId":"1",
    "InputTime":"2008-12-12"
},
{
    "AssetId":"TCNS2006889",
    "ServerIdcId":"2",
    "InputTime":"2008-1-1"
}
]}
}
}

 

 

解析的类:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Web.Script.Serialization;

namespace Tencent.Itil.Cmsi.Common
{
    public class GeneralSearchResult
    {
        public Header header = new Header();

        private DataTable fieldDefine = new DataTable();

        /// <summary>
        /// 返回的数据结构定义,无数据
        /// </summary>
        public DataTable FieldDefine
        {
            get { return fieldDefine; }
            set { fieldDefine = value; }
        }

        private DataTable retrunData = new DataTable();

        /// <summary>
        /// 返回的数据,格式为DataTable,结构和FieldDefine中的结构一样
        /// </summary>
        public DataTable RetrunData
        {
            get { return retrunData; }
            set { retrunData = value; }
        }

        /// <summary>
        /// 将json数据转换为定义好的对象,数据转换为DataTable
        /// </summary>
        /// <param name="jsonText"></param>
        /// <returns></returns>
        public static GeneralSearchResult GetTransformData(string jsonText)
        {
            GeneralSearchResult gsr = new GeneralSearchResult();

            JavaScriptSerializer s = new JavaScriptSerializer();

            Dictionary<string, object> JsonData = (Dictionary<string, object>)s.DeserializeObject(jsonText);

            Dictionary<string, object> dataSet = (Dictionary<string, object>)JsonData["dataSet"];

            Dictionary<string, object> header = (Dictionary<string, object>)dataSet["header"];

            Dictionary<string, object> fieldDefine = (Dictionary<string, object>)dataSet["header"];

            Dictionary<string, object> data = (Dictionary<string, object>)dataSet["data"];

            object[] rows = (object[])data["row"];

            gsr.header.Version = header["version"].ToString();

            gsr.header.ErrorInfo = header["errorInfo"].ToString();

            gsr.header.ReturnCode = header["returnCode"].ToString();

            gsr.header.ReturnRows = Convert.ToInt16(header["returnRows"]);

            gsr.header.TotalRows = Convert.ToInt16(header["totalRows"]);

            Dictionary<string, object> dicFieldDefine = (Dictionary<string, object>)dataSet["fieldDefine"];

            foreach (KeyValuePair<string, object> ss in dicFieldDefine)
            {
                gsr.FieldDefine.Columns.Add(ss.Key, typeof(string));
            }

            gsr.RetrunData = gsr.FieldDefine.Clone();

            foreach (object ob in rows)
            {
                Dictionary<string, object> val = (Dictionary<string, object>)ob;

                DataRow dr = gsr.RetrunData.NewRow();

                foreach (KeyValuePair<string, object> sss in val)
                {
                    dr[sss.Key] = sss.Value;
                }
                gsr.RetrunData.Rows.Add(dr);
            }
            return gsr;
        }

        /// <summary>
        /// 数据文件头定义
        /// </summary>
        public class Header
        {
            private string version;

            /// <summary>
            /// 版本
            /// </summary>
            public string Version
            {
                get { return version; }
                set { version = value; }
            }

            private string returnCode;

            /// <summary>
            /// 结果码,0为正常,否则为有错误
            /// </summary>
            public string ReturnCode
            {
                get { return returnCode; }
                set { returnCode = value; }
            }

            private string errorInfo;

            /// <summary>
            /// 如果ReturnCode为非0时的错误信息
            /// </summary>
            public string ErrorInfo
            {
                get { return errorInfo; }
                set { errorInfo = value; }
            }

            private int totalRows;

            /// <summary>
            /// 查询结果总行数
            /// </summary>
            public int TotalRows
            {
                get { return totalRows; }
                set { totalRows = value; }
            }

            private int returnRows;

            /// <summary>
            /// 返回的数据行数
            /// </summary>
            public int ReturnRows
            {
                get { return returnRows; }
                set { returnRows = value; }
            }
        }
    }
}
 

 

使用方法:

GeneralSearchResult gsr = new GeneralSearchResult();            
gsr = GeneralSearchResult.GetTransformData(text); 
 

 

0
0
分享到:
评论

相关推荐

    C# 解析json格式数据为IList

    C#中解析JSON通常使用的是Json.NET库,这是一个非常流行且功能强大的开源库,可以方便地进行JSON序列化和反序列化。如果你还没有安装,可以通过NuGet包管理器添加Json.NET到你的项目中。 使用Json.NET解析JSON为...

    C#解析Json数据(.html)

    在提供的HTML文件"C# 解析JSON格式数据 - CSDN博客.html"中,可能包含了更详细的示例和解析技巧,配合"C# 解析JSON格式数据 - CSDN博客_files"中的资源,读者可以深入学习并实践C#解析JSON的各种方法。通过学习和...

    C#解析Json工具LitJson

    LitJson是C#编程语言中一个轻量级的Json解析库,主要用来处理Json格式的数据。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读及编写,同时也便于机器解析和生成,被广泛应用于...

    C#像java一样优雅的解析JSON数据

    C#的一个解析JSON的工具类,像java一样优雅的解析JSON数据,包含有JSONObject和JSONArray对象。 JSONObject json = new JSONObject(); json.Put("sex", "男"); json.Put("age", 123); json.Put("name", "张三"); ...

    C#对多级json解析

    首先,我们需要了解C#中用于解析JSON的库,最常用的是 Newtonsoft.Json,也被称为Json.NET。这是一个强大的JSON库,提供了丰富的功能,包括序列化、反序列化、JSON路径查询等。 解析JSON的基本步骤如下: 1. **...

    C#中Json 解析类库,使用dictionary 解析未知字段的对象

    总结来说,使用Json.NET库和Dictionary在C#中解析JSON是一种灵活且实用的方法,尤其适用于处理动态或未知结构的JSON数据。只需注意类型转换以及处理可能的异常,如找不到Key或类型不匹配。通过这种方式,你可以轻松...

    C#解析JSON字符串类

    在.NET框架中,C#是一种常用的编程语言,用于构建各种应用程序。在现代Web开发中,JSON(JavaScript Object Notation)已成为数据...在JsonStrTest这个项目中,你可以找到更多关于C#解析JSON字符串的实际示例和用法。

    c#如何解析Json

    总结,C#解析JSON既有内置的`System.Text.Json`,也有流行的Json.NET库。两者都有各自的优点和适用场景。对于简单需求,内置库可能已足够;而对于更复杂的场景,Json.NET提供了更强大的功能。开发者应根据项目需求...

    C# json格式解析,Json格式字符串与C#对象相互转换,类库+使用案例,注释详细

    /// 将Json字符串解析为C#中的对象 /// Json格式中的字符串值识别 /// 将Json字符串解析为Dictionary, dynamic&gt;对象。 /// 将Json字符串解析为dynamic[]对象。 /// Dictionary类型对象转换为Json格式字符串 /// C#...

    C#封装和解析json

    如果不知道JSON的具体结构,可以使用`JObject`来解析JSON。这允许我们以键值对的形式访问JSON属性: ```csharp dynamic jsonObject = JObject.Parse(jsonString); Console.WriteLine(jsonObject.Name); // 输出...

    C# 解析 JSON 打印日志类

    通过以上知识点的实现,我们可以创建一个功能强大的日志系统,不仅可以记录常规信息,还能解析JSON数据,适应各种应用场景。在实际开发中,这样的日志类能够极大地提高问题诊断的效率,提升软件的健壮性。

    C#解析Json

    本篇文章将详细介绍四种C#解析JSON的方法。 首先,理解JSON的基本语法至关重要。JSON的数据结构主要由对象和数组构成。对象是以花括号{}包围的键值对集合,键必须是字符串,用双引号括起,值可以是各种数据类型,...

    c#利用Newtonsoft.Json解析json(带数组)

    除了`DeserializeObject`,还有其他几个用于解析JSON的方法,如`JObject.Parse`和`JArray.Parse`,它们返回的是Json.NET的动态类型,可以用于处理未知或不固定的JSON结构。但通常,直接使用强类型的方式更推荐,因为...

    JSONObject解析json,C# asp.net JSON解析 com.force.json

    在本篇中,我们将深入探讨如何在C# ASP.NET环境中使用`com.force.json`库来解析JSON。 `com.force.json`是一个针对.NET平台的高性能JSON库,由Salesforce公司开发,它提供了快速且内存效率高的JSON解析和生成功能。...

    C# JSON实体类生成工具

    这个工具的使用方法通常是这样的:开发者在界面上输入或复制一段JSON文本,然后点击“生成”按钮,工具会解析JSON并创建相应的C#代码。生成的代码可以直接复制到项目中,用于将JSON数据映射到对象实例,或者将对象...

    C# WinForm 解析json並寫入DataGridView

    在本场景中,我们探讨的是如何在C# WinForm应用中解析JSON数据,并将其显示在DataGridView控件中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和客户端之间的数据传输。 ...

    C# 解析JSON 附带思路

    5. **动态对象解析**: 如果你不确定JSON的结构,或者不想预先定义C#类,可以使用`JObject`或`JToken`来解析JSON为动态对象: ```csharp string dynamicJson = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; ...

    C#解析Json字符串.zip

    总之,C#解析JSON字符串主要依赖于Newtonsoft.Json库,它提供了丰富的API和灵活性,使得在C#中处理JSON变得简单而高效。无论是简单的对象转换,还是复杂的动态解析,都有对应的解决方案。理解并熟练掌握这些知识,...

    C#解析json的Newtonsoft.Json.dll各种.net版本

    在.NET开发领域,C#语言提供了多种方式来处理JSON数据,其中最受欢迎的库之一就是Newtonsoft.Json.dll。这个库由James Newton-King 开发,它为C#开发者提供了丰富的功能,便于序列化和反序列化JSON,使得JSON数据在...

    C# JSON通用转换类

    操作类中包含: 1. 过滤特殊字符 2. 格式化字符型、日期型、布尔型 3. List转换成Json 4. 对象转换为Json ...10. 解析JSON字符串生成对象实体 11. 解析JSON数组生成对象实体集合 12. 反序列化JSON到给定的匿名对象

Global site tag (gtag.js) - Google Analytics