Untiy Json和Xml的序列化和反序列化

这篇具有很好参考价值的文章主要介绍了Untiy Json和Xml的序列化和反序列化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Json的序列化和反序列化

1.定义数据类

[Serializable]
public class ZoomPoint
{
    // 点名称, 将作为Key被字典存储
    public string name;

    // 轴心X坐标
    public Vector2 pivot = Vector2.one / 2;

    // 放大倍率,小于1是为缩小倍率,小于0是取绝对值,不允许原点对称缩放,需要保证计算轴心逻辑正确
    // 默认设为1.5f 放大倍率
    public float zoomMagnification = 5f;

    // 改变的需要的时间,默认设为1f
    public float time = 1.0f;

    public override string ToString()
    {
        return $"name = {this.name}, pivot = ({pivot.ToString()}), zoomMagnification = {this.zoomMagnification}, time = {this.time}";
    }
}

2. 定义Json存储类

// 数据存储接受类
[Serializable]
public class Data{
    // public ZoomPoint[] zoomPoints;
    // public Dictionary<string, ZoomPoint> zoomPoints;
    public List<ZoomPoint> zoomPoints;
}

3.序列化

// 写入数据
public void WriteDataTest(){
    Data data = new()
    {
        zoomPoints = new List<ZoomPoint>()
    };

    ZoomPoint point1 = new ZoomPoint
    {
        name = "1",
        pivot = new Vector2(0.75f,0.75f)
    };
    ZoomPoint point2 = new ZoomPoint
    {
        name = "2",
        pivot = new Vector2(0.5f,0.5f)
        
    };

    data.zoomPoints[0] = point1;
    data.zoomPoints[1] = point2;

    string js = JsonUtility.ToJson(data);

    // 获取项目路径
    string fileUrl;
    if(filePath == ""){
        fileUrl = Application.streamingAssetsPath + jsonFileName;
    }else{
        fileUrl = filePath;
    }
    
    using(StreamWriter sw  = new StreamWriter(fileUrl))
    {   
        sw.WriteLine(js); //保存数据
        sw.Close(); 
        sw.Dispose();
    }
} 

4.反序列化

 public Data ReadData(){
            // 获取文件路径
            string fileUrl;
            if(filePath == ""){
                fileUrl = Application.streamingAssetsPath + jsonFileName;
            }else{
                fileUrl = filePath;
            }
            
            //读取文件
            string readDate;
            using (StreamReader sr = File.OpenText(fileUrl)){
                readDate = sr.ReadLine();
                sr.Close();
            }

            Data data = JsonUtility.FromJson<Data>(readDate);

            // 分配内存
            if(data == null ){
                data = new Data() {
                    zoomPoints = new List<ZoomPoint>()
                };
                return data;
            }

            // 数据保存到字典里
            foreach(ZoomPoint zp  in data.zoomPoints){
                dict.TryAdd(zp.name, zp);
            }
            return data;
        }

数据存储效果:

Untiy Json和Xml的序列化和反序列化,json,xml


Ps: Unity C# Json 序列化换行

在ToJson中使用两个参数,第二个参数PrettyPrint 输入True
private void JsonText() {
    Node node = new Node() {
        name = "Node_01",
        pos = new(0, 0)
    };

    string filePath = Application.streamingAssetsPath + "/Json_01.json";
    string str = JsonUtility.ToJson(node, true);

    using (StreamWriter sw = new StreamWriter(filePath)) {
        sw.WriteLine(str); // 保存数据
        sw.Close(); // 关闭文档
        sw.Dispose();
    }

    Debug.Log(str);

    Grid grid = new() {
        nodes = new List<Node>()
    };
    Node node1 = new Node() {
        name = "Node_01",
        pos = new Vector2(0, 0)
    };
    Node node2 = new Node() {
        name = "Node_02",
        pos = new Vector2(0,1)
    };

    grid.nodes.Add(node1);
    grid.nodes.Add(node2);

    string filePath_01 = Application.streamingAssetsPath + "/Json_02.json";
    string str_01 = JsonUtility.ToJson(grid, true);

    using (StreamWriter sw = new StreamWriter(filePath_01)) {
        sw.WriteLine(str_01); // 保存数据
        sw.Close(); // 关闭文档
        sw.Dispose();
    }

    Debug.Log("数据序列化完成");
}


[Serializable]
public class Node {
    public string name;
    public Vector2 pos;
}

[Serializable]
public class Grid {
    public List<Node> nodes;
}

效果:

Untiy Json和Xml的序列化和反序列化,json,xml

Untiy Json和Xml的序列化和反序列化,json,xml


Xml的序列化和反序列化

1.定义数据类

public class XmlText {
    public string name;
    public string value;

    public List<int> list;
    public override string ToString() {
        return $"name = {name}, value = {value}, list = {list}";
    }
}

2.序列化

引用:

using System.Io;
using System.Xml.Serialization;
public void Init() {
    test = new XmlText() {
        name = "Xml测试",
        value = "value",
        list = new List<int>()
    };

    test.list.Add(1);
    test.list.Add(3);
    test.list.Add(100);

}
 // 序列化Xml
public void XmlSerialize() {
    // 定义流文件
    FileStream fileStream = new FileStream(Application.streamingAssetsPath + "/text.xml",FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
    // 定义写入流
    StreamWriter sw = new StreamWriter(fileStream, System.Text.Encoding.UTF8);
    // 位于System.Xml.Serialization 中的Xml序列化
    XmlSerializer xml = new XmlSerializer(test.GetType());

    // 将类序列化写入流中
    xml.Serialize(sw, test);
    // 关闭流
    sw.Close();
    fileStream.Close();
}

3.反序列化

public XmlText Deserialize() {
    // 流文件
    FileStream fs = new FileStream(Application.streamingAssetsPath + "/text.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
    // 定义序列化类
    XmlSerializer xml = new XmlSerializer(typeof(XmlText));
    // 反向序列化
    XmlText result = (XmlText)xml.Deserialize(fs);
    fs.Close();

    return result;

}

结果:

Untiy Json和Xml的序列化和反序列化,json,xml文章来源地址https://www.toymoban.com/news/detail-639921.html

到了这里,关于Untiy Json和Xml的序列化和反序列化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASP.NET中JSON的序列化和反序列化

      JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式。在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间、集合、字典的处理。

    2024年02月15日
    浏览(35)
  • 【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )

    当谈到网络编程时,序列化和反序列化是非常重要的概念。在上一篇文章中,我们已经了解了在Linux环境下实现简单的TCP网络程序的基础知识。本文将继续探讨序列化和反序列化,这些概念对于在网络上传输数据以及跨网络通信至关重要。通过深入了解序列化和反序列化,我

    2024年04月08日
    浏览(88)
  • Spring Boot 中使用 ObjectMapper 进行 JSON 序列化和反序列化

    在 Java 中,可以使用各种 JSON 序列化和反序列化工具将 Java 对象转换为 JSON 字符串或者将 JSON 字符串转换为 Java 对象。其中,Jackson 库是比较常用的 JSON 序列化和反序列化工具之一,它提供了 ObjectMapper 类,用于将 Java 对象转换为 JSON 字符串,或者将 JSON 字符串转换为 Java 对象

    2024年02月14日
    浏览(44)
  • C#: Json序列化和反序列化,集合为什么多出来一些元素?

    如下面的例子,很容易看出问题: 如果类本身的无参构造函数, 就添加了一些元素,序列化,再反序列化,会导致元素增加。 如果要避免,必须添加: new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }

    2024年02月10日
    浏览(56)
  • cJSON(C语言JSON)库(适用于嵌入式序列化和反序列化)

    JSON与序列化和反序列化 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它以易于阅读和编写的文本形式表示结构化数据。JSON 格式广泛用于将数据从一个应用程序传输到另一个应用程序,特别是在Web应用程序中,因为它与JavaScript兼容,容易在客户端和服务器之间进

    2024年02月04日
    浏览(35)
  • 【Java万花筒】选择最适合您的数据序列化格式:比较 Avro、Protocol Buffers、JSON、XML、MessagePack和BSON

    在当今数据驱动的世界中,高效地处理和传输数据变得至关重要。选择合适的数据序列化格式对于数据存储、通信和处理的性能至关重要。本文将介绍并比较几种常用的数据序列化格式,包括Apache Avro、Protocol Buffers、JSON、XML、MessagePack和BSON。通过了解它们的概述、特点、应用

    2024年02月20日
    浏览(56)
  • Unity XML3——XML序列化

    ​ 序列化:把对象转化为可传输的字节序列过程称为序列化,就是把想要存储的内容转换为字节序列用于存储或传递 ​ 反序列化:把字节序列还原为对象的过程称为反序列化,就是把存储或收到的字节序列信息解析读取出来使用 1.准备数据结构 2.进行序列化 XmlSerializer:用

    2024年02月15日
    浏览(35)
  • c#示例-xml序列化和xml树

    由于指针和引用类型的存在,在运行中的程序中,数据不一定是整块的。 可能东一块西一块散落在内存的各个地方。 序列,是指连续且有序的一个整体。序列化就是把数据变为连续有序整体的过程。 经过这样处理后的数据就可以方便的进行传输和储存了。 xml是一种文本数据

    2024年02月16日
    浏览(39)
  • 安卓数据存储补充:XML序列化

    序列化是将对象状态转换为可保存或传输的格式的过程。我们可以把对象序列化为不同的格式,比如说:JSon序列化、XML序列化、二进制序列化等等,不同的形式适应不同的业务需求。 把对象的成员变量转化为XML格式,需要使用Xml序列化器(XmlSerializer类),序列化之后的对象

    2024年02月10日
    浏览(83)
  • 协议,序列化,反序列化,Json

    协议究竟是什么呢?首先得知道主机之间的网络通信交互的是什么数据,像平时使用聊天APP聊天可以清楚,用户看到的不仅仅是聊天的文字,还能够看到用户的头像昵称等其他属性。也就可以证明网络通信不仅仅是交互字符串那么简单。事实上网络通信还可能会通过一个结构

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包