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. ...
随机推荐
- xml模块学习
import xml.etree.ElementTree as ET tree = ET.parse("xmltest.xml") root = tree.getroot() pr ...
- leetcode974
这道题目描述很清晰,直接两层循环,代码如下: class Solution(object): def subarraysDivByK(self, A: 'List[int]', K: int) -&g ...
- PSR-1 基本代码规范
基本代码规范 本篇规范制定了代码基本元素的相关标准, 以确保共享的PHP代码间具有较高程度的技术互通性. 关键词 “必须”("MUST").“一定不可/一定不能”("MU ...
- FutureTask原理解析
原文链接:http://www.studyshare.cn/blog-front/blog/details/1130 首先写一个简单的Demo public static void main(Stri ...
- python中的全局变量和局部变量
python中,对于变量作用域的规定有些不一样. 在诸如C/C++.java等编程语言中,默认在函数的内部是能够直接訪问在函数外定义的全局变量的,可是这一点在python中就会有问题.以下是一个样例. ...
- Java中获取系统时间的四种方式
第一种: Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" ...
- 同机器与不同机器redis集群
此文为另外一位大神原创由于没有找到分享功能 粘贴复制到此 原地址为https://blog.csdn.net/u012042021/article/details/72818759 一.同机器下的 ...
- (转)Thinkpad X1 Carbon 扩展硬盘
http://tieba.baidu.com/p/5837920925 网上看到有人成功利用X1C空闲的4G模块来实现了扩充用的是东芝RC100或者建兴的T11 其实难点应该是2242这种尺寸的SSD ...
- Apple watch ,小米微信通知
Applewatch怎么显示微信通知?iWatch显示微信消息通知设置方法.大家都知道Applewatch上收到微信消息,iWatch是不会显示通知的,需要用户自行设置才行.下面小编来教大家如何设置A ...
- make,makefile,cmake“暴力编译法”的个人经验或理解。
通常我们在本地编译库(opecv.pcl)等我们喜欢使用make -jN (N代表线程数)这样可以加速编译过程, 但是,这不一定是“线程安全”的,因为当某个线程在编译时,经常其他线程编译依赖本线程的 ...