首先声明是调用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()); } }
但是这样会影响效率, 所以慎用.....