玩玩樂樂

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

首先声明是调用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  阅读(841)  评论(0编辑  收藏  举报