关于C#使用工具类解析JSON数据以及将类JSON化
2017-03-24 16:56
393 查看
项目中做的开发,记录下。
C#处理JSON数据还是相当方便的,System.Runtime.Serialization.Json提供了非常好用的相关方法。
首先,我们需要弄清楚需要处理的JSON的数据格式,举例如下:
{ "ret": "0", "Isupdate": "1", "Newver": "V1.1.0", "Filelist": [ { "Name": "Debug.zip", "Size": "56693419", "url": "http://localhost/AutoUpdateService/UpdateFiles/V1.0.1/Debug.zip", "Localpath": ""} ] }
我们需要根据JSON格式建立相应的class用来处理JSON,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace AutoUpdater_Client.Model
{
//从更新服务器返回的更新信息
[DataContract]
class UpdateInfoJSON
{
//返回值,为0表示获取信息成功
[DataMember(Order = 0)]
public int ret { get; set; }
//是否需要更新,0表示不需要,1表示需要
[DataMember(Order = 1)]
public int Isupdate { get; set; }
//最新版本号
[DataMember(Order = 2)]
public string Newver { get; set; }
//升级内容说明
[DataMember(Order = 3)]
public string Content { get; set; }
//升级文件总大小,以bps为单位
[DataMember(Order = 4)]
public long Totalsize { get; set; }
//需要下载的文件总数量
[DataMember(Order = 5)]
public int Filecount { get; set; }
//需要下载的文件列表
[DataMember(Order = 6)]
public FileList [] Filelist { get; set; }
}
//Filelist所指向的文件信息
[DataContract]
class FileList
{
//文件名称
[DataMember(Order = 0)]
public string Name { get; set; }
//文件大小
[DataMember(Order = 1)]
public long Size { get; set; }
//文件下载URL地址
[DataMember(Order = 2)]
public string url { get; set; }
//文件存储路径【在终端上的存储路径】
[DataMember(Order = 3)]
public string Localpath { get; set; }
}
}
注意,上面代码中的DataContract和DataMember不可少,否则在序列化的时候会抛出异常。
接下来编写一个处理JSON的class,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
namespace AutoUpdater_Client.JSON
{
public static class JSONOperator
{
//将JSON数据转化为对应的类型
public static T parase<T>(string JSONStr)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(JSONStr)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
}
//将对应的类型转化为JSON字符串
public static string stringify(object jsonObject)
{
using (var ms = new MemoryStream())
{
new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
}
接下来调用class处理json:
//解析从服务端返回的JSON结果
UpdateInfoJSON updateInfo = JSONOperator.parase<UpdateInfoJSON>(result);
string result = JSONOperator.stringify(updateInfo);
完成。
C#处理JSON数据还是相当方便的,System.Runtime.Serialization.Json提供了非常好用的相关方法。
首先,我们需要弄清楚需要处理的JSON的数据格式,举例如下:
{ "ret": "0", "Isupdate": "1", "Newver": "V1.1.0", "Filelist": [ { "Name": "Debug.zip", "Size": "56693419", "url": "http://localhost/AutoUpdateService/UpdateFiles/V1.0.1/Debug.zip", "Localpath": ""} ] }
我们需要根据JSON格式建立相应的class用来处理JSON,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace AutoUpdater_Client.Model
{
//从更新服务器返回的更新信息
[DataContract]
class UpdateInfoJSON
{
//返回值,为0表示获取信息成功
[DataMember(Order = 0)]
public int ret { get; set; }
//是否需要更新,0表示不需要,1表示需要
[DataMember(Order = 1)]
public int Isupdate { get; set; }
//最新版本号
[DataMember(Order = 2)]
public string Newver { get; set; }
//升级内容说明
[DataMember(Order = 3)]
public string Content { get; set; }
//升级文件总大小,以bps为单位
[DataMember(Order = 4)]
public long Totalsize { get; set; }
//需要下载的文件总数量
[DataMember(Order = 5)]
public int Filecount { get; set; }
//需要下载的文件列表
[DataMember(Order = 6)]
public FileList [] Filelist { get; set; }
}
//Filelist所指向的文件信息
[DataContract]
class FileList
{
//文件名称
[DataMember(Order = 0)]
public string Name { get; set; }
//文件大小
[DataMember(Order = 1)]
public long Size { get; set; }
//文件下载URL地址
[DataMember(Order = 2)]
public string url { get; set; }
//文件存储路径【在终端上的存储路径】
[DataMember(Order = 3)]
public string Localpath { get; set; }
}
}
注意,上面代码中的DataContract和DataMember不可少,否则在序列化的时候会抛出异常。
接下来编写一个处理JSON的class,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
namespace AutoUpdater_Client.JSON
{
public static class JSONOperator
{
//将JSON数据转化为对应的类型
public static T parase<T>(string JSONStr)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(JSONStr)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
}
//将对应的类型转化为JSON字符串
public static string stringify(object jsonObject)
{
using (var ms = new MemoryStream())
{
new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
}
接下来调用class处理json:
//解析从服务端返回的JSON结果
UpdateInfoJSON updateInfo = JSONOperator.parase<UpdateInfoJSON>(result);
string result = JSONOperator.stringify(updateInfo);
完成。
相关文章推荐
- 关于iOS中几种第三方对XML/JSON数据解析的使用
- 关于C#使用DataContractJsonSerializer来进行JSON解析
- 关于Android的assets资源使用,以及网络间的数据传递JSON格式处理
- 解析JSON数据的详细步骤以及偷懒技巧(使用第三方库GSON以及GsonFormat工具)
- 安卓使用Gson解析服务器返回Json数组,以及java服务器怎样返回list集合的Json数据(原创)
- 网络传输中,对Json组织方式的数据的解析以及使用这个方法,模拟从服务器端下载数据
- json数据解析与JAVA对象转换以及在JQUERY中的使用
- C#使用LitJson对Json数据解析
- spring boot新手教程之使用FastJson解析JSON数据以及解决返回中文乱码问题
- C#使用LitJson对Json数据解析
- Android JSON数据格式的解析,与简单对象、带泛型的List和Map的转换,以及GSON的使用
- java ajax 请求后获取 json 数据 以及 使用 解析 ,解惑
- 关于C#向服务器请求json数据并解析
- 关于UEditor插件的使用以及UEditor数据回显问题,数据库存储标签代码前台页面如何解析问题小结
- 【工具类系列】浏览器解析JSON数据插件,解决数据加密乱码,以及JSON格式化问题
- 使用swiftyJson和Alamofire做网络请求,以及json数据的解析
- 关于iOS中几种第三方对XML/JSON数据解析的使用
- c# 使用Newtonsoft.Json 对数据进行打包与解析
- 关于SAXReader解析XML以及JSONObject和JSONArray的使用总结
- Android中使用Gson解析JSON数据