zoukankan      html  css  js  c++  java
  • 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());
                }
            }
    

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

  • 相关阅读:
    Python小白的数学建模 ---- 系列课程
    Maven学习笔记
    JavaScript 中的 Var,Let 和 Const 有什么区别
    (鸡汤文)搞懂了 JavaScript 定时器 setTimeout() 的 this 指向!
    setTimeout返回值的验证,(〒︿〒) 请原谅我一直以来对你的忽视
    终于把初中到大学的数学知识梳理完了(学习算法必备数学知识)
    最简单入门深度学习
    机器学习基本流程
    Vue.js源码解析-Vue初始化流程
    最大公约数&最小公倍数
  • 原文地址:https://www.cnblogs.com/newer/p/2334519.html
Copyright © 2011-2022 走看看