Json在js,jquery中可以直接使用,比如下串:
{
"from":"en"
,"to":"zh"
,"trans_result":
[
{"src":"today","dst":"\u4eca\u5929"}
]
}
可以直接使用data.from即可获取到”en”.
但是在c#中不可以。要获取值,有三种方法:
- string的方法,找到节点索引、获取子串;
- string=>xmlNode,再读节点值
- 利用Newtonsoft.Json,直接将json与类对象互相转换,这样很方便,之后可以像js一样智能感应的使用对象的属性(即json的节点值)。
前提是:编写对应于json串节点的类!这点可以利用工具解决,生成好后复制类代码即可。详见:
http://jsonclassgenerator.codeplex.com/
注意的是:
- 类属性和json节点值的大小写无关,不影响使用。
- json与类对象互相转换后字符串的编码可能变化。这点稍注意。
以下简述Newtonsoft.Json的使用。详见示例:BaiduTranslate.TestConsole
- 生成类
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":"\u4eca\u5929"}
51 // ]
52 //}
53 //出错结果,则显示如下,但该字符串经过转换后不会出错,RootObject的From\To属性正常有值,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 }
Json与类对象转换
时间: 2024-10-15 10:51:17