JSON
类似 XML
- JSON 是纯文本
- JSON 具有“自我描述性”(人类可读)
- JSON 具有层级结构(值中存在值)
- JSON 可通过 JavaScript 进行解析
- JSON 数据可使用 AJAX 进行传输
为什么使用 JSON?
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:
使用 XML
- 读取 XML 文档
- 使用 XML DOM 来循环遍历文档
- 读取值并存储在变量中
使用 JSON
- 读取 JSON 字符串
- 用 eval() 处理 JSON 字符串
JSON 语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
Json的序列化与反序列化
原文链接:https://www.cnblogs.com/fengxuehuanlin/p/5700282.html
三种方式:
1.使用JavaScriptSerializer类:
//使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中
using System.Web.Script.Serialization;
class Program
{
static void Main(string[] args)
{
//序列化操作
JavaScriptSerializer jss = new JavaScriptSerializer();
var json = new { name = "fxhl", age = 23 };
string str = jss.Serialize(json);
//反序列化操作
Person person = jss.Deserialize<Person>(str);
Console.WriteLine(person.name);
}
}
[Serializable]
public class Person
{
public string name { get; set; }
public int age { get; set; }
}
2.使用JSON.NET类库:
class Program
{
static void Main(string[] args)
{
//序列化操作
var json = new { user = new { name = "fxhl", age = 23 }};
string jsonData = JsonConvert.SerializeObject(json);
Console.WriteLine(jsonData);
//反序列化操作方法一
Person p1= JsonConvert.DeserializeObject<Person>(jsonData);
Console.WriteLine(p1.user.name);
//反序列化操作方法二
string json2 = "[{\"user\":{\"name\":\"fxhl\",\"age\":23}}]";
List<Person> listp2= JsonConvert.DeserializeObject<List<Person>>(json2);
Console.WriteLine(listp2[0].user.name);
Console.ReadKey();
}
}
public class Person
{
public Person user { get; set; }
public string name { get; set; }
public int age { get; set; }
}
3.使用DataContractJsonSerializer类:
//Person实体中的契约 [DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的
//使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中
using System.Runtime.Serialization.Json;
static void Main(string[] args)
{
//序列化操作
Person p1 = new Person()
{
name = "fxhl",
age = 23
};
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Person));
MemoryStream msObj = new MemoryStream();
//将序列化之后的Json格式数据写入流中
js.WriteObject(msObj, p1);
//从0这个位置开始读取流中的数据
msObj.Position = 0;
StreamReader sr = new StreamReader(msObj, Encoding.UTF8);
string json = sr.ReadToEnd();
Console.WriteLine(json);
sr.Close();
msObj.Close();
//反序列化操作
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Person));
Person model = (Person)deseralizer.ReadObject(ms);// //反序列化ReadObject
Console.WriteLine(model.name);
}
Console.ReadKey();
}
}
[DataContract]
public class Person
{
[DataMember]
public string name { get; set; }
[DataMember]
public int age { get; set; }
}
总结:最后还是尽量使用JSON.NET来序列化和反序列化,性能好。
实例
参考链接:https://blog.csdn.net/lovegonghui/article/details/50247407?utm_source=blogxgwz0
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace Json_XmlSerializer
{
class Program
{
static void Main(string[] args)
{
//JavaScriptSerializer
序列化操作
//JavaScriptSerializer jss = new JavaScriptSerializer();
//var json = new { name = "小明", birth = 1990, school = "No.1 Middle School", height = 1.70, weight = 65 };
//string str = jss.Serialize(json);
FileStream fs = new FileStream(@"D:\js.json", FileMode.OpenOrCreate);
//Console.WriteLine(str);
反序列化操作
//Person person = jss.Deserialize<Person>(str);
//Console.WriteLine(person.name+" "+person.birth);
//Console.ReadKey();
//Json.NET
//序列化操作
var json = new { name = "小明", birth = 1990, school = "No.1 Middle School", height = 1.70, weight = 65 };
string jsonData = JsonConvert.SerializeObject(json);
Console.WriteLine(jsonData);
//将json序列化并保存到文件中
File.WriteAllText(@"D:/js.json", jsonData);
反序列化操作方法一
//Person person = JsonConvert.DeserializeObject<Person>(jsonData);
//Console.WriteLine(person.name + " " + person.birth);
//反序列化json文件并写入到一个对象中
Person person = JsonConvert.DeserializeObject<Person>(File.ReadAllText(@"D:/js.json"));
Console.WriteLine(person.name + " " + person.birth);
Console.WriteLine("反序列化json文件成功!");
Console.ReadKey();
}
}
}