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数据保存和读取的更多相关文章

  1. C# 调用C/C++动态链接库,结构体中的char*类型

    用C#掉用C++的dll直接import就可以之前有不同的类型对应,当要传递结构体的时候就有点麻烦了,这里有一个结构体里边有char*类型,这个类型在C#中调用没法声明,传string是不行的默认st ...

  2. 使用python将mysql数据库的数据转换为json数据

    由于产品运营部需要采用第三方个推平台,来推送消息.如果手动一个个键入字段和字段值,容易出错,且非常繁琐,需要将mysql的数据转换为json数据,直接复制即可. 本文将涉及到如何使用Python访问M ...

  3. [Go] golang结构体成员与函数类型

    package main import ( "fmt" ) //定义一个类型 type tsh struct { //定义成员,类型是func() string test func ...

  4. mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler

    mybatis 比 ibatis 改进了很多,特别是支持了注解,支持了plugin inteceptor,也给开发者带来了更多的灵活性,相比其他ORM,我还是挺喜欢mybatis的. 闲言碎语不要讲, ...

  5. .net动态类型在处理json数据方面的应用

    我们在.net中处理json数据时,经常需要定义相应的类.比如json数据:{ "name" : "hello", "age" : 18 } ...

  6. 将Dictionary序列化为json数据 、json数据反序列化为Dictionary

    需要引用System.Web.Extensions  dll类库 /// <summary> /// 将json数据反序列化为Dictionary /// </summary> ...

  7. 使用jQuery解析JSON数据(由ajax发送请求到php文件处理数据返回json数据,然后解析json写入html中呈现)

    在上一篇的Struts2之ajax初析中,我们得到了comments对象的JSON数据,在本篇中,我们将使用jQuery进行数据解析. 我们先以解析上例中的comments对象的JSON数据为例,然后 ...

  8. [Swift通天遁地]四、网络和线程-(5)解析网络请求数据:String(字符串)、Data(二进制数据)和JSON数据

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  9. Numpy中数据的常用的保存与读取方法

    小书匠 深度学习  文章目录: 1.保存为二进制文件(.npy/.npz) numpy.save numpy.savez numpy.savez_compressed 2.保存到文本文件 numpy. ...

随机推荐

  1. 打包发布到Tomcat

    idea:      file-->project structure -->  Artifacts --> 点+号 web application exploded  from m ...

  2. 如何用jquery获取form表单的值

    $(function(){ $('.btn').click(function(){ alert($('#form').serialize()); }) }) 这样就获取到了 #form的值.

  3. 转码器ffmpeg安装

    网络上很多帖子 但是基本上都是没有验证过复制粘贴的 以下是我自己装时流程和网络上的差不多但是中间不通的地方已经改正 centos7 1. 安装autoconf cd /App/srcwget http ...

  4. Taro开发微信小程序之初始化地图到当前位置

    在componentDidMount中,初始化mapCtx. let _this = this this.mapCtx = Taro.createMapContext('container') //c ...

  5. Intel 82599网卡异常挂死原因

    前提背景: 生产环境上,服务器网络突然断链,ssh连接失败. 问题初步定位: 查找内核日志,得到网卡异常信息 Jan 24 11:52:43 localhost kernel: ixgbe 0000: ...

  6. 寻找遗失的tags

    现象:查询数据库,存在tags:{} 的字段,但是api查询时,不存在tags字段 日志定位Sample的init方法中对resource_metadata的扁平处理: 3.对应方法分析 在ceilo ...

  7. VirtualBox 休眠恢复后无法联网解决办法

    环境:lubuntu 首先ifconfig查看网卡名,我这里是enp0s3. 接着: sudo ifconfig enp0s3 down sudo ifconfig enp0s3 up sudo dh ...

  8. gitlab-ci.xml:script config should be a string or an array of strings

    The following command in a job script: STATUS_ID=$(grep -Eo "Status Code [0-9]+: Done" som ...

  9. Docker端口映射

    Docker端口映射是指将容器内应用的服务端口映射到本机宿主机器.当要在宿主机外部访问Docker内部应用时,需要对容器内应用端口进行映射. 一.容器启动时指定端口映射 容器运行时可以通过-p 或 - ...

  10. paloalto防火墙激活许可证和订阅

    1.您必须激活购买的每项服务的许可证,然后才能开始使用防火墙保护网络通信.可用许可证和订阅服务包括 • 威胁阻止 — 提供防病毒.防间谍软件和漏洞保护. • URL 筛选 — 可以创建安全策略,以便根 ...