Windows phone 7关于json格式解析

mac2022-06-30  9

Windows phone 7 关于json格式解析

首先声明是调用Newtonsoft.Json.WindowsPhone.dll

下载地址:http://download.csdn.net/detail/liujian650107/4039178

方法体:

using System;using System.Net;using System.Collections.Generic;using System.Runtime.Serialization.Json;using System.IO;using Newtonsoft.Json;using System.Runtime.Serialization;using MicroBlogForWP7.Classes;using System.Text.RegularExpressions;

namespace test.Classes.Json{ /// <summary> /// json的解析和发送相关操作 /// </summary> public class JsonOperateOwn {

/// <summary> /// json转对象 /// </summary> /// <param name="JsonStr">json数据</param> /// <param name="type">返回类型,如果出现服务器端错误返回JsontoError类型,类型分别为JsonToModelOwn和JsontoSuccess,或者返回错误信息</param> public object NewtonsoftJson(string JsonStr, Type type) { string str = JsonStr.Substring(2, 6); if (str.Equals("result")) { return JsonConvert.DeserializeObject(JsonStr, type); } else { return JsonConvert.DeserializeObject(JsonStr, new JsontoError().GetType()); } }

/// <summary> /// 返回dictionary /// </summary> /// <param name="JsonStr">json数据</param> public object NewtonsoftJson(string JsonStr) { return JsonConvert.DeserializeObject(JsonStr, typeof(Dictionary<string, string>));

}

/// <summary> /// 返回dictionary /// </summary> /// <param name="JsonStr">json数据</param> public object NewtonsoftJsonForObject(string JsonStr) { return JsonConvert.DeserializeObject(JsonStr, typeof(Dictionary<string, Object>));

} }}

错误信息:

using System; using System.Net; using System.Collections.Generic; using System.Runtime.Serialization.Json; using Newtonsoft.Json; using System.Runtime.Serialization; namespace test.Classes.Json { [DataContract] public class JsontoError { /// <summary> /// 错误信息 /// </summary> [DataMember(Name = "error")] public Error error { get; set; } } [DataContract] public class Error { /// <summary> /// 错误编码 /// </summary> [DataMember(Name = "code")] public string code { get; set; } /// <summary> /// 错误详情 /// </summary> [DataMember(Name = "message")] public string message { get; set; } } }

 返回对象:   该对象不是固定的,  要由你自己的实际情况来决定json对象.  不要一味的照抄...   重点注意格式

json字符串: using System; using System.Net; using System.Collections.Generic; using System.Runtime.Serialization.Json; using Newtonsoft.Json; using System.Runtime.Serialization; namespace test.Classes.Json { /// <summary> /// 接收数据, 数据类型为单独对象 /// </summary> [DataContract] public class JsonToModelOwn { /// <summary> /// 返回正确的对象 /// </summary> [DataMember(Name = "result")] public ResultTrueJson resultTrueJson { get; set; } } /// <summary> /// 返回正确的对象 /// </summary> [DataContract] public class ResultTrueJson { /// <summary> /// 访问方法 /// </summary> [DataMember(Name = "cmd")] public string ErrorCode { get; set; } /// <summary> /// 返回对象数据 /// </summary> [DataMember(Name = "params")] public Dictionary<string, string> data { get; set; } } } json字符串{"result":{"cur": 0,"pages": 1,"list":{ "meta": ["pictures ","name","notes"], "data": [["http://xxx.png","科技","这是一张科技图片"],["http://xxx.png ","艺术","这是一张美女写真"]]}}} using System; using System.Net; using System.Collections.Generic; using System.Runtime.Serialization.Json; using Newtonsoft.Json; using System.ServiceModel; using System.Runtime.Serialization; namespace test.Classes.Json { /// <summary> /// 接收数据类型, 内部存在List /// </summary> [DataContract] public class JsonToListOwn { /// <summary> /// result对象 /// </summary> [DataMember(Name = "result")] public ResultTrueJsonList resultTrueJson { get; set; } } public class ResultTrueJsonList { /// <summary> /// 访问地址 /// </summary> [DataMember(Name = "cmd")] public string ErrorCode { get; set; } /// <summary> /// 访问行数 /// </summary> [DataMember(Name = "cur")] public int cur { get; set; } /// <summary> /// 页码总数 /// </summary> [DataMember(Name = "pages")] public int pages { get; set; } [DataMember(Name = "list")] public JsonList list { get; set; } } [DataContract] public class JsonList { [DataMember(Name = "meta")] public string[] meta { get; set; } [DataMember(Name = "data")] public List<string[]> data { get; set; } } }

  

调用方法:

 JsonOperateOwn jo = new JsonOperateOwn(); var obj = jo.NewtonsoftJson("json字符串", new JsonToModelOwn().GetType()); //json解析成JSONToListObj

  

我写的这个纯粹就是给初学者看的...  

调用的方法确实是很简单, 但是有的时候总会遇到这样的问题...  现在就总结一下我之前遇到的一些问题....  

1: 就是返回对象的问题.    该对象的格式不固定. 所以返回的时候要重点注意.  一般情况是两种格式一个是单独的一个对象, 在有一种就是返回LIST集合 , 我上边两种对象已经明确给出.   Name对象的值必须写正确,否则解析的时候会出现错误.    写这里的时候一定要耐心的写, 因为这里很容易出现错误...  之前我做的时候在这里出现错误修改了好久....

 

2: json字符串返回的数据中存在半角引号, 一般是不会出现这种情况的...  但是为了避免存在这样的情况发生,   我的处理办法是:

public object NewtonsoftJson(string JsonStr, Type type) {        JsonStr = new Regex(@"(?<![\[,\,,{,:])""(?![},:,\,,\]])").Replace(JsonStr, "'"); string str = JsonStr.Substring(2, 6); if (str.Equals("result")) { return JsonConvert.DeserializeObject(JsonStr, type); } else { return JsonConvert.DeserializeObject(JsonStr, new JsontoError().GetType()); } }

    但是这样会影响效率, 所以慎用..... 

posted on 2012-02-01 14:33  刘剑_1989 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/newer/archive/2012/02/01/2334519.html

相关资源:json 解析 工具
最新回复(0)