Json序列化之.NET开源类库Newtonsoft.Json的研究
来源:互联网 发布:java thread import 编辑:程序博客网 时间:2024/05/16 11:44
JSON类库下载地址http://www.newtonsoft.com/json下载类库导入引用。
引用的命名空间:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
本人百度文库:C#操作Word文档超详细,TreeView无限开辟节点代码(FTP服务器中的文件和文件名为例)
Ø 深入研究之前先熟悉一下几个常用的类区
类名
说明
JObject
用于操作Json对象
方法
说明
三者共同点都是返回给JObject。
而JObject类可以用到操作json对象
JObject.Parse(string json)
Json含有Json对象的字符串
JObject.FromObject(object o)
转化对象
JObject.Load(JsonReader reader)
Reader包含着Json对象
JArray
用操作json数组
JValue
表示JSON(字符串,整数,日期等)中的值。
JProperty
表示JSON属性。
Ø Json的字符串搭建格式:
JSON数据在名称/值表达中:
1、名称使用字符串,双引号表示
2、值可以是数字,
3、字符串是双引号,
4、数组是方括号,
5、对象是花括号。
Ø Json代码实战之(读取JsonReader和 解析JObect)Json
Ø 使用JsonReader读取字符串
/// <summary>
/// JsonReader顺序解析
/// </summary>
private void jsonOne()
{
string jsonText = @"{""Name"":""小三"",""Age"":""22""}";
JsonReader reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read())
{
Console.WriteLine(reader.TokenType);//名称类型
Console.WriteLine(reader.ValueType);//输出类型
Console.WriteLine(reader.Value);//输出值
Console.WriteLine();
}
}
Ø JObject操作
关于JObect:
http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm
/// <summary>
/// JObject用于操作Json对象解析
/// </summary>
private void jsonTwo()
{
//第一种
string jsonText = @"{""Name"":""小红"",""Age"":""22""}";
JObject jo = JObject.Parse(jsonText);//加载json数据
string[]values = jo.Properties().Select(e => e.Name.ToString()+":"+ e.Value.ToString()).ToArray<string>();//获取数据
foreach(string s in values)
{
Console.WriteLine(s);
}
//第二种
JsonReader jr = new JsonTextReader(new StringReader(@"{""你好"":""hihihihi""}"));
JObject jo1 = JObject.Load(jr);//加载jsonReader读取的字符串进行操作
Console.WriteLine(jo1);
//第三种
JArray array = new JArray();
array.Add("hi 大家好");
array.Add(new DateTime().Ticks);
JObject o = new JObject();
o["创投科技"]= array;
Console.WriteLine(o.ToString());
/*输出:
* Name:小红
Age:22
{
"你好": "hihihihi"
}
{
"创投科技": ["hi 大家好",]
}
*/
}
Ø JArray数组操作 和 嵌套json
/// <summary>
/// JArray数组类型
/// </summary>
private void jsonArray()
{
string JsonArrayText = @"[{""Name"":""小黑"",""Age"":""16""},{""Name"":""小白"",""Age"":""17""}]";
//反序列化对象的JSON字符串。
JArray ja = (JArray)JsonConvert.DeserializeObject(JsonArrayText);
//指定某个行的名称数据
string name1 = ja[1]["Name"].ToString();
Console.WriteLine(name1);
//遍历jsons数组
for(int i=0;i<ja.Count;i++)
{
Console.WriteLine(ja[i].ToString());
}
}
/// <summary>
/// Json嵌套性数据
/// </summary>
private void json()
{
try
{
string jsonText = @"
{
""xxx"":
{
x1:
{
shantou:
[{""zone"":""哈尔"",""zone_en"":""街道""}],
xia:
[{""Name"":""小红"",""Age"":""2999""}]
}
}
}";
JObject o = (JObject)JsonConvert.DeserializeObject(jsonText);
//不加方括号json类型正常输出
Console.WriteLine(o);//输出全部
//以下输出只对数组有效
Console.WriteLine(o["xxx"]["x1"]["shantou"][0]);//输出xxx类下的x1类的shantou类中的数据
Console.WriteLine(o["xxx"]["x1"]["shantou"][0]["zone"]);//输出xxx类下的x1类的shantou类中的Name数组
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
}
Ø 序列化Json
v jsonWrite写入stringwriter并且输出
/// <summary>
/// JsonWrite
/// </summary>
private void jsonWriter()
{
StringWriter sw = new StringWriter();
JsonWriter jw = new JsonTextWriter(sw);//json写入StringWriter
jw.WritePropertyName("格式化爱情");
jw.WriteValue("努力奋斗");
Console.WriteLine(sw.ToString());
}
v 反序列
构建json数据结构类,用Newtonsoft.Json.JsonConvert.DeserializeObject<Student>(jsonText);写入数据结构类
/// <summary>
/// Json数据架构类之操作之反序列化对象
/// Newtonsoft.Json.JsonConvert.DeserializeObject
/// </summary>
private void jsonClass()
{
string jsonText = @"{
""start"":
{ ""str1"":
{
""Name"":""小蔡"",
""Age"":""22222""
},
""str2"":
{
""selfworth"":""自我提升"",
}
}
}";
//反序列化公式
Student json = Newtonsoft.Json.JsonConvert.DeserializeObject<Student>(jsonText);
json.time = DateTime.Now;//给时间复制
json.start.str1.Age = "26";//给年龄修改值
Console.WriteLine("time == " + json.time);
Console.WriteLine("str1 == " + json.start.str1.Name + "\t" + json.start.str1.Age);
Console.WriteLine("str2 == " + json.start.str2.selfworth);
}
数据结构类:
/// <summary>
/// Json数据架构之入口
/// </summary>
public class Student
{
public DateTime time {get;set; }
public sta start {get;set; }
}
/// <summary>
/// Json分界接口
/// </summary>
public class sta
{
public stastr1 str1 {get;set; }
public stastr2 str2 {get;set; }
}
/// <summary>
/// Json输出用户信息
/// </summary>
public class stastr1
{
public string Name {get;set; }
public string Age {get;set; }
}
/// <summary>
/// Json输出用户价值
/// </summary>
public class stastr2
{
public string selfworth {get;set; }
}
v 序列化
构建json数据结构类,用JsonSerializer类;写入数据结构类
/// <summary>
/// Json数据架构类之操作之序列化
/// JsonSerializer
/// </summary>
private void jsonClass2()
{
//方法一
st s = new st() { Name = "程序员",Age = 20 };//添加数据
//将对象序列化和反序列化为JSON格式。该JsonSerializer使您能够控制对象的编码成JSON
JsonSerializer ser = new JsonSerializer();//JSON序列化
StringWriter sw = new StringWriter();//写入字符初始化
ser.Serialize(new JsonTextWriter(sw),s);//参数含义:第一个参数设置为写入的stringwriter,第二个参数设置为输出的数据结构类
Console.WriteLine(sw.GetStringBuilder().ToString());
Console.WriteLine("\n\n第二种实现方法List泛型");
//方法二
List<st> ls = new List<st>();
st s1 = new st() { Name = "小K1",Age = 20,ls = new List<string> {"123","456","789" } };
st s2 = new st() { Name = "小K2",Age = 22,ls = new List<string> {"101112","131415","161718" } };
ls.Add(s1);
ls.Add(s2);
StringWriter sw1 = new StringWriter();
JsonSerializer js = new JsonSerializer();
js.Serialize(sw1,ls);
Console.WriteLine(sw1.GetStringBuilder().ToString());
}
数据结构类:
/// <summary>
/// Json数据结构
/// </summary>
public class st
{
public string Name {get;set; }
public int Age {get;set; }
public List<string> ls {get;set; }
}
- Json序列化之.NET开源类库Newtonsoft.Json的研究
- Json序列化之.NET开源类库Newtonsoft.Json的研究
- C# Json.NET序列化之Newtonsoft.Json
- .net json序列化组件Json.NET(Newtonsoft.Json)
- ASP.NET:使用Newtonsoft.Json序列化和反序列化JSON对象的例子
- wince 能用的 Newtonsoft.Json(Json.Net)
- [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
- Newtonsoft.Json.dll使用 .net json序列化与返序列化
- .Net使用Newtonsoft.Json.dll(JSON.NET)对象序列化成json、反序列化json示例教程
- Newtonsoft.Json的序列化和反序列化
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Newtonsoft.Json序列化和反序列
- Python 文件读写基础操作实例
- 面试题及答案
- dos窗口下运行java可以,运行javac却报错
- 突然想到一道简单题,但也有深意!!
- Fantasy of a Summation
- Json序列化之.NET开源类库Newtonsoft.Json的研究
- 数据结构排序法之希尔排序法(Shell Sort)
- 【HDU 1875】畅通工程再续(最小生成树-水题)
- 第一天
- Android 官方下拉刷新SwipeRefreshLayout使用
- base64学习笔记
- 排序算法(三)交换类排序:冒泡排序和快速排序
- DOM包裹wrap()方法
- Java插入排序