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());
                }
            }
    

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

  • 相关阅读:
    剑指Offer(Java版)第五十题:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志, 写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看, 但却读不懂它的意思。例如,“student. a am I”
    剑指Offer(Java版)第四十九题:汇编语言中有一种移位指令叫做循环左移(ROL), 现在有个简单的任务,就是用字符串模拟这个指令的运算结果。 对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。 例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果, 即“XYZdefabc”。是不是很简单?OK,搞定它!
    【转载】Java 内存分配全面浅析
    【记】Linux下安装JDK1.7
    【ZooKeeper】典型应用场景概览
    正则表达式工具RegexBuddy
    【基础】RandomAccess
    【JNDI】Java Naming and Directory Interface
    【AOP】Cglib动态代理实现方式
    【事务】分布式事物原理
  • 原文地址:https://www.cnblogs.com/newer/p/2334519.html
Copyright © 2011-2022 走看看