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 }