json
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//导入json第三方库 使用nuget搜索 LitJson
using LitJson;
using System.IO;
namespace ZhiYou_winform_json解析14
{
json概念:是一种轻量级数据交互格式。
轻量级说明此种数据格式在网络传输的时候所占的带宽少,传输效率高
json是目前市场最流行的一种数据交换格式。很多语言都支持它,如:js,java,c#等。
json格式文件特点:
1.以键值对()的形式存储数据。
如:"name":"value"。称name为键,value为值,也可称name为属性名称,value为属性值。
2.每一个键值对必须以英文逗号分割,但最后一个键值对除外。
3.属性值(value键值)如果是字符串类型必须是双引号包裹,不能使用单引号。属性值(vlaue键值)如果是数字、布尔也需要使用双引号包裹。
4.属性名称是区分大小写。
5. [] 代表数组 {}代表字典
//json格式//
6. JSON在线解析格式化 - JSON.fans
7.序列化:把一个对象转换成json字符串。 存数据
反序列化:把一个json字符串转换成对象。 取数据
反序列化要想成功,有一个关键点:对象的属性列表必须和json
格式的字符串中的属性名称一一对应。
8.为什么要序列和反序列化
直接操作字符串需要借助字符串截取等相应的方法。
编写代码麻烦,所以我们需要把json格式的字符串反序列化成对象。
反序列化后,操作对象方便,访问对象的属性直接打点调用。
9. 如何序列化和反序列化使用nuget搜索 LitJson 完成json数据解析
*/
//不使用数据模型序列化和反序列化
private void button1_Click(object sender, EventArgs e)
{
//json字符串
// 将json字符串转换成对象 反序列ToObject
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(@"1.txt"));// [{"name":"张三","age":"18"},{"name":"李四","age":"20"}]
foreach (JsonData item in jsonData)
{
Console.WriteLine(item["name"]);
Console.WriteLine(item["age"]);
}//修改数据
jsonData[0]["name"] = "王五";
//序列化成json字符串// 序列化ToJson
string json = JsonMapper.ToJson(jsonData);Console.WriteLine(json);
//IO 操作 存入字符串
File.WriteAllText(@"1.txt", json);}
//使用数据模型序列化
private void button2_Click(object sender, EventArgs e)
{
Person person = new Person() { Name = "张三", Age = 18, Height = 180f };
Person person1 = new Person() { Name = "张三1", Age = 19, Height = 181f };
Person person2 = new Person() { Name = "张三2", Age = 29, Height = 191f };
//序列化json数据
string personJsonStr= JsonMapper.ToJson(person);
Console.WriteLine(personJsonStr); //{"Name":"\u5F20\u4E09","Age":18,"Height":180}//三个对象转json
List<Person> list = new List<Person>();list.Add(person);
list.Add(person1);
list.Add(person2);
string listJsonStr = JsonMapper.ToJson(list);
Console.WriteLine(listJsonStr);
try
{
//IO 操作 存入字符串
File.WriteAllText(@"2.txt", listJsonStr);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
//存入本地
File.WriteAllText(@"2.txt", listJsonStr);
}
//使用数据模型反序列化
private void button3_Click(object sender, EventArgs e)
{
//方式1
//JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(@"2.txt"));
//List<Person> list = new List<Person>();
//foreach (JsonData item in jsonData)
//{// Person person = new Person();
// person.Name = item["Name"].ToString();
// person.Age = int.Parse(item["Age"].ToString());
// person.Height = float.Parse(item["Height"].ToString());
// list.Add(person);
//}
//方式2
List<Person> list = JsonMapper.ToObject<List<Person>>(File.ReadAllText(@"2.txt"));foreach (Person p in list)
{
Console.WriteLine(p.Name);
Console.WriteLine(p.Age);
Console.WriteLine(p.Height);
}
}
//使用数据模型嵌套序列化
private void button4_Click(object sender, EventArgs e)
{
People people = new People() { Name = "张三", Age = 18};
people.EmployeesList.Add(new Employee() { Position = "视觉工程师", EmployeeId = 1, CompanyName = "微软" });People people1 = new People() { Name = "张三1", Age = 19 };
people1.EmployeesList.Add(new Employee() { Position = "视觉工程师1", EmployeeId = 11, CompanyName = "微软1" });List<People> list = new List<People>();
list.Add(people);
list.Add(people1);
string listJsonStr = JsonMapper.ToJson(list);
Console.WriteLine(listJsonStr);//IO 操作 存入字符串
File.WriteAllText(@"3.txt", listJsonStr);
}
//使用数据模型嵌套反序列化
private void button5_Click(object sender, EventArgs e)
{
List<People> list = JsonMapper.ToObject<List<People>>(File.ReadAllText(@"3.txt"));foreach (People p in list)
{
Console.WriteLine(p.Name);
Console.WriteLine(p.Age);foreach (Employee item in p.EmployeesList)
{
Console.WriteLine(item.Position);
Console.WriteLine(item.CompanyName);
Console.WriteLine(item.EmployeeId);
}
}
}
/数据模型类 model 类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }public float Height { get; set; }
}public class People
{public string Name { get; set; }
public int Age { get; set; }//员工类集合 用于后续json数据嵌套
public List<Employee> EmployeesList { get; set; } = new List<Employee>();
}
//数据模型3 用于嵌套People类
public class Employee
{//职位
public string Position { get; set; }
//员工编号
public int EmployeeId { get; set; }
//公司名称
public string CompanyName { get; set; }
}
MDI
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
/*MDI作用可以使 窗体包含窗体 并且对窗体进行排列等操作
* 在项目中使用MDI窗体时,通常将一个MDI窗口窗体作为父窗体
*父窗体可以将多个子窗体在容器中使用
设置:属性中父窗体IsMDIContainer:true;*/
namespace zhiyou_winform_MDI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();//获取menuStrip中 选项
Console.WriteLine(menuStrip1.Items[0]);
}private void Form1_Load(object sender, EventArgs e)
{
}private void 新建窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{
ChildForm1 childForm1 = new ChildForm1();
//指定MDI子窗体的父窗体
childForm1.MdiParent = this;
childForm1.Show();
//子窗体显示在0,0点
childForm1.Location = new Point(0, 0);
}
/*
排列MDI窗体public void LayoutMdi(MdiLayout value)
value是MdiLayout的枚举值之一,用来定义MDI子窗体的布局。
Cascade 层叠排列MDI子窗体
TileHorizontal 水平平铺MDI子窗体
TileVertical 垂直平铺MDI子窗体
*/
private void 层叠排列ToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}private void 垂直平铺ToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
//关闭父窗体
private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}private void 查询MDI子窗体个数ToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show(this.MdiChildren.Length.ToString());foreach (var item in MdiChildren)
{
Console.WriteLine(item);
}
}private void 关闭MDI子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form item in this.MdiChildren)
{
item.Close();
}
}private void button1_Click(object sender, EventArgs e)
{foreach (Control item in this.Controls)
{
Console.WriteLine(item.Text);
}
}private void button2_Click(object sender, EventArgs e)
{
//通过父窗体 找子窗体 的子控件
foreach (Form item in this.MdiChildren)
{
foreach (Control item1 in item.Controls)
{
if (item1 is Button)
{item1.BackColor = Color.Red;
}
}
}
}private void button3_Click(object sender, EventArgs e)
{
this.MdiChildren[0].Location = new Point(100, 100);
}
}
}
管理MDI子窗体
foreach (Control item in MdiChildren)
{
if (item is Form7)
{
item.BackColor = Color.Red;
}
}