当前位置: 首页 > news >正文

winform4

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;
}
}

http://www.jsqmd.com/news/901103/

相关文章:

  • 2026年 宝钢HC1150/1400MS吉帕钢推荐榜:汽车轻量化超高强度冷轧钢板/先进高强钢/热成形用钢/吉帕级材料源头厂家解析 - 品牌企业推荐师(官方)
  • TCP/IP--七层通信
  • 别再手动轮询了!用Nginx给本地Nacos集群做个‘管家’(RuoYi-Cloud-Plus实战)
  • CSAPP CacheLab避坑指南:从Ubuntu换源到C语言文件操作,手把手解决实验环境搭建难题
  • 如何高效管理多任务窗口:专业隐私保护解决方案
  • GeoScene+人大金仓使用方法
  • 鸣潮终极解放指南:免费开源自动化工具让你5分钟搞定日常任务
  • Sapiens2与其他视觉Transformer对比分析:为什么它在人类中心任务中表现更优
  • 大模型备忘录
  • IndoBERT Large P2 OpenMind社区贡献指南:如何参与项目开发
  • 如何构建泛化能力强大的JoyTag模型:从Danbooru数据集到摄影图像识别
  • 从水印去除到隐写术分析:一次意外的数字追踪发现之旅
  • OneNET物联网平台实战:如何用MQTT.fx模拟设备与云端双向通信(附完整Topic规则解析)
  • AI功能如何拖慢核心产品增长?诊断与解决之道
  • AsymFLUX.2-klein-9B完全指南:从安装到生成惊艳图像的快速入门
  • Citra 3DS模拟器:如何在电脑上免费畅玩任天堂3DS经典游戏
  • 基于LangChain与RAG技术构建智能PDF问答系统
  • 避坑指南:在自建AI集群中,NCCL建图过程如何影响你的多卡训练性能?
  • 【vscode输出中文乱码】
  • MATLAB玩转RTL-SDR:从驱动安装到硬件支持包配置的保姆级避坑指南
  • 保姆级教程:用ESP32的SPI接口驱动BL0942功耗传感器(附完整代码)
  • LangChain亲儿子LangGraph:解锁复杂Agent
  • 鸣潮自动化工具OK-WW:基于图像识别的智能游戏辅助完整攻略
  • AI代码审查实战:Anote工具集成与高效人机协同工作流设计
  • 前端工程师的云端进化:从浏览器到边缘计算的范式转移
  • 别再只会用for循环了!用Python二分法5分钟搞定方程求根(附完整代码与避坑指南)
  • 2026年质量好的PERT电熔法兰/宁波耐高温电熔管件/宁波电熔管件长期合作厂家推荐 - 品牌宣传支持者
  • 2026年LangChain替代框架深度对比:LlamaIndex、Haystack、AutoGen与轻量级方案选型指南
  • 现代计算系统性能优化:地址翻译瓶颈与Revelator技术解析
  • 集成电路展测评,挑选适配IC企业的集成电路展 - 品牌2025