• Json与类对象转换


    Json在js,jquery中可以直接使用,比如下串:

    {

      "from":"en"

      ,"to":"zh"

      ,"trans_result":

        [

          {"src":"today","dst":"u4ecau5929"}

        ]

    }

    可以直接使用data.from即可获取到”en”.

    但是在c#中不可以。要获取值,有三种方法:

    1. string的方法,找到节点索引、获取子串;
    2. string=>xmlNode,再读节点值
    3. 利用Newtonsoft.Json,直接将json与类对象互相转换,这样很方便,之后可以像js一样智能感应的使用对象的属性(即json的节点值)。

    前提是:编写对应于json串节点的类!这点可以利用工具解决,生成好后复制类代码即可。详见:

    http://json2csharp.com/

    http://jsonclassgenerator.codeplex.com/

    注意的是:

    1. 类属性和json节点值的大小写无关,不影响使用。
    2. json与类对象互相转换后字符串的编码可能变化。这点稍注意。

     

    以下简述Newtonsoft.Json的使用。详见示例:BaiduTranslate.TestConsole

    1. 生成类

      2.引入对应版本的Newtonsoft.Json。

      3.使用obj=>json,或者json=>obj

    下面贴代码:是用c#写百度翻译的

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Net;
     6 using System.IO;
     7 using Newtonsoft.Json;
     8 
     9 namespace BaiduTranslate.TestConsole
    10 {
    11     /// <summary>
    12     /// json根节点
    13     /// </summary>
    14     public class RootObject
    15     {
    16         public string From { get; set; }
    17         public string To { get; set; }
    18         public List<TransResult> Trans_result { get; set; }
    19     }
    20     /// <summary>
    21     /// json子节点
    22     /// </summary>
    23     public class TransResult
    24     {
    25         public string Src { get; set; }
    26         public string Dst { get; set; }
    27     }
    28 
    29 
    30     class Program
    31     {
    32         static void Main(string[] args)
    33         {
    34             Console.Write("请输入待翻译单词:");
    35             string english = Console.ReadLine().Trim();
    36 
    37             string requestUrl = string.Format(System.Configuration.ConfigurationManager.AppSettings["TransferUrl"],english);
    38             HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(requestUrl);
    39             WebResponse resp = mRequest.GetResponse();
    40             if (resp != null)
    41             {
    42                 var streamReader = new StreamReader(resp.GetResponseStream());
    43                 #region 翻译返回json字符串的形式
    44                 //正常结果
    45                 //{
    46                 //  "from":"en"
    47                 //  ,"to":"zh"
    48                 //  ,"trans_result":
    49                 //    [
    50                 //      {"src":"today","dst":"u4ecau5929"}
    51                 //    ]
    52                 //}
    53                 //出错结果,则显示如下,但该字符串经过转换后不会出错,RootObject的FromTo属性正常有值,Trans_result为null
    54                 //{"error_code":"52003","error_msg":"UNAUTHORIZED USER","from":"auto","to":"auto","monLang":"zh","query":"today"} 
    55                 #endregion
    56                 string result = streamReader.ReadToEnd();
    57                 //json=>obj,使用Newtonsoft.Json将json字符串转成合适的对象,并将汉字编码也转成成汉字
    58                 RootObject data = JsonConvert.DeserializeObject<RootObject>(result);
    59 
    60                 #region obj=>json
    61                 //使用Newtonsoft.Json将对象转成json字符串
    62                 //值和原字符串result相同,只是属性名大写且是汉字
    63                 //string strJsonTest = JsonConvert.SerializeObject(data);
    64                 #endregion
    65 
    66                 if (data.Trans_result != null)
    67                     Console.WriteLine(string.Format("翻译结果:{0}", data.Trans_result[0].Dst));
    68                 else
    69                     Console.WriteLine("可能是密钥错误或网络错误");
    70             }
    71             else
    72             {
    73                 Console.WriteLine("网络错误");
    74             }
    75 
    76             Console.ReadLine();
    77         }
    78     }
    79 }
    View Code

     

  • 相关阅读:
    视图组件之开关按钮
    单选框与复选框的实现
    String、StringBuffer 、StringBuilder 的区别(转)
    布局管理器之相对布局(二)
    布局管理器之相对布局(一)
    帧布局 FrameLayout
    表格布局TableLayout
    布局管理器中的线性布局
    36选7
    冒泡
  • 原文地址:https://www.cnblogs.com/nlh774/p/3766018.html
Copyright © 2020-2023  润新知