Json与类对象转换
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#写百度翻译的
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net;
- using System.IO;
- using Newtonsoft.Json;
- namespace BaiduTranslate.TestConsole
- {
- /// <summary>
- /// json根节点
- /// </summary>
- public class RootObject
- {
- public string From { get; set; }
- public string To { get; set; }
- public List<TransResult> Trans_result { get; set; }
- }
- /// <summary>
- /// json子节点
- /// </summary>
- public class TransResult
- {
- public string Src { get; set; }
- public string Dst { get; set; }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Console.Write("请输入待翻译单词:");
- string english = Console.ReadLine().Trim();
- string requestUrl = string.Format(System.Configuration.ConfigurationManager.AppSettings["TransferUrl"],english);
- HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create(requestUrl);
- WebResponse resp = mRequest.GetResponse();
- if (resp != null)
- {
- var streamReader = new StreamReader(resp.GetResponseStream());
- #region 翻译返回json字符串的形式
- //正常结果
- //{
- // "from":"en"
- // ,"to":"zh"
- // ,"trans_result":
- // [
- // {"src":"today","dst":"\u4eca\u5929"}
- // ]
- //}
- //出错结果,则显示如下,但该字符串经过转换后不会出错,RootObject的From\To属性正常有值,Trans_result为null
- //{"error_code":"52003","error_msg":"UNAUTHORIZED USER","from":"auto","to":"auto","monLang":"zh","query":"today"}
- #endregion
- string result = streamReader.ReadToEnd();
- //json=>obj,使用Newtonsoft.Json将json字符串转成合适的对象,并将汉字编码也转成成汉字
- RootObject data = JsonConvert.DeserializeObject<RootObject>(result);
- #region obj=>json
- //使用Newtonsoft.Json将对象转成json字符串
- //值和原字符串result相同,只是属性名大写且是汉字
- //string strJsonTest = JsonConvert.SerializeObject(data);
- #endregion
- if (data.Trans_result != null)
- Console.WriteLine(string.Format("翻译结果:{0}", data.Trans_result[].Dst));
- else
- Console.WriteLine("可能是密钥错误或网络错误");
- }
- else
- {
- Console.WriteLine("网络错误");
- }
- Console.ReadLine();
- }
- }
- }
Json与类对象转换的更多相关文章
- jackson 进行json与java对象转换 之三
2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...
- (精华)将json数组和对象转换成List和Map(小龙哥和牛徳鹤的对话)
将java标准的数据结构ArrayList和HashMap转换成json对象和数组很简单 只需要JSONArray.fromObject(obj);或者JSONObject.fromObject(ob ...
- jackson 进行json与java对象转换 之二
主要用于测试学习用jackson包实现json.对象.Map之间的转换. 1.准备测试用的Java类 (1)Link类 package test; /** * Description: 联系方式,被u ...
- jackson 进行json与java对象转换 之一
代码无真相,为了最简单的说明,我直接上代码. public class User { private String name; private Gender gender; private List& ...
- com.alibaba.fastjson.JSON对类对象的序列化与反序列化
1. 目标 把类的对象存储到字符串可存储 2. 类定义 public interface JsonInterface { } mport com.alibaba.fastjson.JSON; impo ...
- jackson 进行json与java对象转换 之四
jackson简单使用,对象转json,json转对象,json转list POJO序列化为json字符串: 准备一个POJO: @JsonIgnoreProperties(ignoreUnkno ...
- java json字符串与对象转换
下载引入包gson-2.0.jar 1.字符转数据 final Map map = new HashMap();map.put("contents", "[{\&q ...
- .net序列化和反系列化json与类型对象转换
先添加程序集: System.Web.Extensions(在 System.Web.Extensions.dll 中) 引用:using System.Web.Script.Serializati ...
- c#序列化和反系列化json与类型对象转换
先添加程序集: System.Web.Extensions(在 System.Web.Extensions.dll 中) 引用:using System.Web.Script.Serializati ...
随机推荐
- CSS抗锯齿 font-smoothing 属性介绍
CSS3里面加入了一个“-webkit-font-smoothing”属性. 这个属性可以使页面上的字体抗锯齿,使用后字体看起来会更清晰舒服. 加上之后就顿时感觉页面小清晰了. 淘宝也在用哦! 它有三 ...
- Leetcode Minimum Path Sum
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...
- [小工具]ChemistryHelper
// 此博文为迁移而来,写于2015年3月25日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vuv7.html 前几天 ...
- [深入浅出Windows 10]QuickCharts图表控件库解析
13.4 QuickCharts图表控件库解析 QuickCharts图表控件是Amcharts公司提供的一个开源的图表控件库,这个控件库支持WPF.Silverlight.和Windows等 ...
- Android -- TextView、button方法详解(1)
1.TextView常规方法 TextView myTextView=null; //声明变量 myTextView=(TextView)findViewById(R.id.myTextView); ...
- ssh免密登录
背景:搭建Hadoop环境需要设置无密码登陆,所谓无密码登陆其实是指通过证书认证的方式登陆,使用一种被称为"公私钥"认证的方式来进行ssh登录. 在linux系统中,ssh是远程登 ...
- SQLSERVER远程备份、恢复(转)
SQLSERVER服务实例名称:192.168.0.2需要备份的数据库名称: a备份机器名称(Client端):192.168.0.3备份机用户:zf 密码:123备份机域名:domain备份机提供备 ...
- 队列 Soldier and Cards
Soldier and Cards 题目: Description Two bored soldiers are playing card war. Their card deck consists ...
- 李洪强iOS经典面试题128
1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEnco ...
- 理解group by 语句的扩展使用
在SQL的开发中我们会经常使用group by语句对数据进行分组统计,然而在一些复杂的BI报表开发中会常遇到更复杂的分组需求,单单使用group by 就不能解决我们的问题了,这时我们就需要学习了解一 ...