C# 结构体和List<T>类型数据转Json数据保存和读取
C# 结构体和List<T>类型数据转Json数据保存和读取
一.结构体转Json
public struct FaceLibrary
{
public string face_name;
public byte[] face_Feature;
}
//序列化结构体
facelibrary = new FaceLibrary();
facelibrary.face_name = "zhangsan";
facelibrary.face_Feature = new byte[] { 0xaa, 0x22, 0x36, 0x45, 0xff };
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(FaceLibrary));
ser.WriteObject(stream1, facelibrary);
stream1.Position = ;
StreamReader sr = new StreamReader(stream1);
Console.Write("JSON form of Person object: ");
Console.WriteLine(sr.ReadToEnd());
//打印结果:
JSON form of Person object: [{"face_Feature":[,,,,],"face_name":"zhangsan"}
//反序列化结构体
stream1.Position = ;
FaceLibrary p2 = (FaceLibrary)ser.ReadObject(stream1);
Console.WriteLine(p2.face_name);
Console.WriteLine(p2.face_Feature);
//输出结果:
wangjin01
System.Byte[]
说明: 通过如上操作,能够将结构体的数据转为Json数据
方法二: 将List<T> 结构的数据转为Json数据
public struct FaceLibrary
{
public string face_name;
public byte[] face_Feature;
}
List<FaceLibrary> listfacex = new List<FaceLibrary>();
//序列化List<T>
facelibrary = new FaceLibrary();
facelibrary.face_name = "zhangsan01";
facelibrary.face_Feature = new byte[] { 0xaa, 0x22, 0x36, 0x45, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan02";
facelibrary.face_Feature = new byte[] { 0xaa, 0x22, 0x36, 0x45, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan03";
facelibrary.face_Feature = new byte[] { 0xaa, 0x22, 0x36, 0x45, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan04";
facelibrary.face_Feature = new byte[] { 0xaa, 0x22, 0x36, 0x45, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan05";
facelibrary.face_Feature = new byte[] { 0xaa, 0x22, 0x36, 0x45, 0xff };
listfacex.Add(facelibrary);
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<FaceLibrary>));
ser.WriteObject(stream1, listfacex);
stream1.Position = ;
StreamReader sr = new StreamReader(stream1);
Console.Write("JSON form of Person object: ");
Console.WriteLine(sr.ReadToEnd());
//输出结果:
JSON form of Person object: [
{"face_Feature":[,,,,],"face_name":"zhangsan01"},
{"face_Feature":[,,,,],"face_name":"zhangsan02"},
{"face_Feature":[,,,,],"face_name":"zhangsan03"},
{"face_Feature":[,,,,],"face_name":"zhangsan04"},
{"face_Feature":[,,,,],"face_name":"zhangsan05"}
]
//反序列化List<T>
stream1.Position = ;
List<FaceLibrary> p2 = (List<FaceLibrary>)ser.ReadObject(stream1);
Console.WriteLine(p2[].face_name);
Console.WriteLine(p2[].face_Feature);
//输出结果:
zhangsan01
System.Byte[]
三.测试应用
/*
应用需求:
1. 通过List<T>将结构体类型<T>的多个数据加载到List<T>中;
2. 将List<T>数据转为Json数据,并写入到文件中;
3. 从文件中读取保存的Json数据,并还原成List<T>数据供后续调用;
//说明: JavaScriptSerializer 需要导入相应的库,
命名空间: System.Web.Script.Serialization
程序集: System.Web.Extensions(位于 System.Web.Extensions.dll)
参考文件:https://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptserializer.aspx
*/
//1.定义结构体和List<T>
public struct FaceLibrary
{
public string face_name;
public byte[] face_Feature;
}
FaceLibrary facelibrary;
List<FaceLibrary> listfacex = new List<FaceLibrary>();
//2. 添加数据到List<T>中
facelibrary.face_name = "zhangsan01";
facelibrary.face_Feature = new byte[] { 0xaa, 0x01, 0x11, 0x21, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan02";
facelibrary.face_Feature = new byte[] { 0xaa, 0x02, 0x12, 0x22, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan03";
facelibrary.face_Feature = new byte[] { 0xaa, 0x03, 0x13, 0x23, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan04";
facelibrary.face_Feature = new byte[] { 0xaa, 0x04, 0x14, 0x24, 0xff };
listfacex.Add(facelibrary);
facelibrary.face_name = "zhangsan05";
facelibrary.face_Feature = new byte[] { 0xaa, 0x05, 0x15, 0x25, 0xff };
listfacex.Add(facelibrary);
//3. 将List<T>数据转为Json数据
String str = JsonListToString(listfacex);
//JSON序列化,将List<T>转换为String
private String JsonListToString (List<FaceLibrary> list)
{
JavaScriptSerializer Serializerx = new JavaScriptSerializer();
string changestr = Serializerx.Serialize(list);
return changestr;
}
//4. 将Json数据写入文件系统
FileWrite("test.txt",str)
//写入文件
private void FileWrite(string filepath,string writestr)
{
FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);
sw.Write(writestr);
sw.Close();
fs.Close();
}
//5. 从文件中读取Json数据
string str = FileRead("test.txt");
//读取文件
private string FileRead(string filepath)
{
FileStream fs = new FileStream(filepath, FileMode.Open);
StreamReader sr = new StreamReader(fs);
string str = sr.ReadToEnd();
sr.Close();
fs.Close();
return str;
}
//6. 将Json数据转换为List<T>数据
List<FaceLibrary> listface = StringToJsonList(str);
//JSON反序列化,将List<T>转换为String
private List<FaceLibrary> StringToJsonList(string str)
{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
List<FaceLibrary> face = Serializer.Deserialize<List<FaceLibrary>>(str);
return face;
}
//以上方法基本能够解决上述问题;
以上代码基于参考如下代码,
/*
// C#将Json字符串反序列化成List对象类集合
using System.IO;
using System.Web.Script.Serialization;
using System.Runtime.Serialization.Json;
public static List<T> JSONStringToList<T>(this string JsonStr)
{
JavaScriptSerializer Serializer = new JavaScriptSerializer();
List<T> objs = Serializer.Deserialize<List<T>>(JsonStr);
return objs;
}
public static T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
//好了,我们来测试下
string JsonStr = "[{Name:'苹果',Price:5.5},{Name:'橘子',Price:2.5},{Name:'柿子',Price:16}]";
List<Product> products = new List<Product>();
products = JSONStringToList<Product>(JsonStr);
//Response.Write(products.Count());
foreach (var item in products)
{
Response.Write(item.Name + ":" + item.Price + "<br />");
}
public class Product
{
public string Name { get; set; }
public double Price { get; set; }
}
结果:
苹果:5.5
橘子:2.5
柿子:16
*/
C# 结构体和List<T>类型数据转Json数据保存和读取的更多相关文章
- C# 调用C/C++动态链接库,结构体中的char*类型
用C#掉用C++的dll直接import就可以之前有不同的类型对应,当要传递结构体的时候就有点麻烦了,这里有一个结构体里边有char*类型,这个类型在C#中调用没法声明,传string是不行的默认st ...
- 使用python将mysql数据库的数据转换为json数据
由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问M ...
- [Go] golang结构体成员与函数类型
package main import ( "fmt" ) //定义一个类型 type tsh struct { //定义成员,类型是func() string test func ...
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
mybatis 比 ibatis 改进了很多,特别是支持了注解,支持了plugin inteceptor,也给开发者带来了更多的灵活性,相比其他ORM,我还是挺喜欢mybatis的. 闲言碎语不要讲, ...
- .net动态类型在处理json数据方面的应用
我们在.net中处理json数据时,经常需要定义相应的类.比如json数据:{ "name" : "hello", "age" : 18 } ...
- 将Dictionary序列化为json数据 、json数据反序列化为Dictionary
需要引用System.Web.Extensions dll类库 /// <summary> /// 将json数据反序列化为Dictionary /// </summary> ...
- 使用jQuery解析JSON数据(由ajax发送请求到php文件处理数据返回json数据,然后解析json写入html中呈现)
在上一篇的Struts2之ajax初析中,我们得到了comments对象的JSON数据,在本篇中,我们将使用jQuery进行数据解析. 我们先以解析上例中的comments对象的JSON数据为例,然后 ...
- [Swift通天遁地]四、网络和线程-(5)解析网络请求数据:String(字符串)、Data(二进制数据)和JSON数据
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Numpy中数据的常用的保存与读取方法
小书匠 深度学习 文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...
随机推荐
- ThreadLocal总结
一.问题抛出 SimpleDateFormat是非线程安全的,在多线程情况下会遇见问题: public static void main(String[] args) { ExecutorServic ...
- vue Element学习和问题处理
1. resetForm内容没有完全被重置在使用resetForm时,会还原数据到初始化data时的值,有时会出现值已修改,但页面无刷新变化.添加: this.$nextTick(() => { ...
- 超简单(两步)-微信怎么实现打开外部浏览器,下载app,打开网页URL
现在微信渠道可以说是拉新最快的渠道,因为微信具备强裂变性.但是目前微信对第三方下载链接的拦截是越来越严格了,那么想要在微信内肆无忌惮地推广链接就需要用到微信跳转浏览器的接口,那如何获取该接口呢? ...
- gradle问题汇总
问题:从SVN下载到本地后,gradle无法同步,报错如下:Failed to resolve: support-core-utilsFailed to resolve: support-media- ...
- 【译】在Transformer中加入相对位置信息
目录 引言 动机 解决方案 概览 注释 实现 高效实现 结果 结论 参考文献 本文翻译自How Self-Attention with Relative Position Representation ...
- html5下F11全屏化的几点注意
1.实现全屏化 var docElm = document.documentElement; //W3C if (docElm.requestFullscreen) { docElm.requestF ...
- openpyxl一点心得
先上代码 from openpyxl import workbook,load_workbook class HomeWork(): def creat_xlsx(self): "" ...
- (十)操作数据库、xlrd、xlwt补充
一.补充操作数据库: 1.建立游标时,指定返回的类型是字典 cur = coon.cursor(cursor=pymysql.cursors.DictCursor) 2.cur.fetchall() ...
- Django form表单功能的引用(注册,复写form.clean方法 增加 验证密码功能)
1. 在app下 新建 forms.py 定义表单内容,类型models from django import forms class RegisterForm(forms.Form): userna ...
- React-Native android 开发者记录
1.安装 安装步骤不多废话,按照官网步骤执行即可 安装完之后,react-native run-android发现报错,页面出不来 Error: Unable to resolve module `. ...