Unity使用Newtonsoft.Json插件实现XML与JSON数据的互转

插件介绍

  • 介绍

Json.Net是一个读写Json效率比较高的.Net框架,.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换。

  • 特点

高性能:比.NET内置的JSON序列化器更快
编写缩进的、易于阅读的JSON
JSON和XML可以互转
支持:net Standard 2.0,。net 2,。net 3.5,。net 4,。net 4.5, Silverlight, Windows Phone和Windows 8 Store

Unity中使用Newtonsoft.Json进行xml与json互转

搭建demo场景

在这里插入图片描述

编写脚本实现json与xml互转的方法

test脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using UnityEngine.UI;

public class test : MonoBehaviour 
{
    public Button JSONwriterBtn;
    public Button XMLwriterBtn;
    private string xmlPath;
    private string jsonPath;
    public Text xmlText;
    public Text jsonText;
    XmlDocument document;

    private void Start()
    {
        xmlPath = Application.dataPath + "/data/question.xml";
        jsonPath = Application.dataPath + "/data/question.json";
        document = new XmlDocument();
        document.Load(xmlPath);//解析xml数据
        xmlText.text = document.InnerXml;
        JSONwriterBtn.onClick.AddListener(XmlToJson);
        XMLwriterBtn.onClick.AddListener(JsonToXml);
    }
    /// <summary>
    /// xml转json的方法
    /// </summary>
    public void XmlToJson()
    {
        string jsonStr = Newtonsoft.Json.JsonConvert.SerializeXmlNode(document, Newtonsoft.Json.Formatting.Indented,false);//数据序列化为Json字符串
        jsonText.text = jsonStr;
        System.IO.File.WriteAllText(jsonPath, jsonStr);//将转换过来的json数据写入json文件
    }
    /// <summary>
    /// json转xml的方法
    /// </summary>
    public void JsonToXml()
    {
        string path= Application.dataPath + "/data/toxml.xml";
        XmlDocument xml = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(jsonText.text, "");//json数据反序列化为xml数据
        xml.Save(path);
    }
}

脚本里首先把question.xml数据加载到XmlDocument对象里,然后调用Newtonfost.JSON包方法JsonConvert.SerializeXmlNode将xml文档转换为json格式的文本字符串,然后显示到Text上,并且通过IO流将json数据写入到question.json文件中,后面再将json字符串转为xml字符串,保存到toxml.xml文件中。

这里我挂载在panel上,记得拖拽对象,不然会报空哦!
在这里插入图片描述

demo演示效果

请添加图片描述
原始xml文件:
在这里插入图片描述

转换的json文件:
在这里插入图片描述
转换的xml文件:
在这里插入图片描述

demo源工程

demo下载
Newtonsoft.Json插件可在demo工程中找到,有问题可以问题哦,喜欢记得一键三连呀!谢谢关注哦。

关于Newtonsoft.Json插件的获取及其一些常用方法

插件获取

1、从官网获取Newtonsoft.Json插件
官网地址
在这里插入图片描述
更多功能用法也可查看官方文档:
官方文档
2、本文用到的演示demo工程有Newtonsoft.Json插件,但可能不是最新的。
3、在Visual Studio中,可以通过NuGet Package Manager获得:
在Visual Studio菜单中,进入Tools/NuGet Package Manager/Manager NuGet Packages for Solution。选择Newtonsoft.json包,选择你所需要的版本并为你的unity工程进行安装。
在这里插入图片描述

常用方法
  • 对象序列化Json字符串:

JsonConvert.SerializeObject(object value):
Json字符串反序列化为对象:

JsonConvert.DeserializeObject(string value):
JsonConvert.DeserializeObject(string value)

  • XML序列化为Json字符串:

JsonConvert.SerializeXmlNode(XmlNode node)
Json反序列化为XML对象:

JsonConvert.DeserializeXmlNode(string value)

  • 参数formatting指的是Json字符串格式有没有缩进
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以使用如下代码实现: ``` using Newtonsoft.Json; using System.Collections.Generic; public class MyDictionaryConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType.IsGenericType && objectType.GetGenericTypeDefinition() == typeof(Dictionary<,>); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var dictionary = (IDictionary)value; var keyType = dictionary.GetType().GetGenericArguments()[0]; var valueType = dictionary.GetType().GetGenericArguments()[1]; writer.WriteStartObject(); foreach (var key in dictionary.Keys) { writer.WritePropertyName(JsonConvert.SerializeObject(key)); serializer.Serialize(writer, dictionary[key]); } writer.WriteEndObject(); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var dictionary = (IDictionary)Activator.CreateInstance(objectType); var keyType = objectType.GetGenericArguments()[0]; var valueType = objectType.GetGenericArguments()[1]; while (reader.Read() && reader.TokenType == JsonToken.PropertyName) { var propertyName = JsonConvert.DeserializeObject(reader.Value.ToString(), keyType); var value = serializer.Deserialize(reader, valueType); dictionary.Add(propertyName, value); } return dictionary; } } ``` 使用方法如下: ``` // 序列化 Dictionary<string, object> dic = new Dictionary<string, object>(); string json = JsonConvert.SerializeObject(dic, new MyDictionaryConverter()); // 反序列化 Dictionary<string, object> result = JsonConvert.DeserializeObject<Dictionary<string, object>>(json, new MyDictionaryConverter()); ``` 需要注意的是,需要在属性上添加 `[JsonConverter(typeof(MyDictionaryConverter))]` 特性来告诉 `Newtonsoft.Json` 使用上述自定义的 `MyDictionaryConverter` 来进行序列化和反序列化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周的Unity小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值