在工作中对json经常要进行序列化和反序列化,为了方便使用的是Newtonsoft.Json,相对而言这个插件比较强大,废话不多说,直接上例程。
1.首先要通过Nuget下载Newtonsoft.Json。添加using Newtonsoft.Json;
2.添加json文件:
{
"User": [
{
"ID": "1",
"Name": "张三",
"Age": 10,
"Sex": "男",
"Job": "机械工程师"
},
{
"ID": "2",
"Name": "李四",
"Age": 20,
"Sex": "女",
"Job": "软件工程师"
}
],
"Station": [
{
"ID": "1",
"Name": "测试机器",
"DateTime": "2018-1-1 00:00:00"
}
],
"Server": [
{
"ID": "2",
"Name": "服务器",
"IP": "127.0.0.1"
}
]
}
注意:我们是先从文件中读取Json数据,然后再反序列化成对象。所以此文件属性设置复制到输出目录应改成始终复制。
2.添加序列化和反序列化代码:
public interface ISerialize //序列化和反序列化接口
{
string Serialize(object obj); //序列化
Object Deserialize(string str); //反序列化
string Version();
}
public class JsonSerialize : ISerialize
{
object ISerialize.Deserialize(string str)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<SerializeInfo>(str);
}
string ISerialize.Serialize(object obj)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);
}
string ISerialize.Version()
{
return "JsonSerialize";
}
}
3.Model是在上一篇的XML基础上修改的,这个暂时凑合着看吧,主要是[JsonProperty(PropertyName = "XXX")]是绑定元素属性的,这个要特别注意
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Newtonsoft.Json;
namespace UnityConsole
{
public class UserInfo
{
[XmlAttribute("id")]
public string ID { get; set; }
[XmlAttribute("name")] //属性
public string Name { get; set; }
[XmlElement(ElementName = "Age")]
public int Age { get; set; }
[XmlElement(ElementName = "Sex")]
public string Sex { get; set; }
[XmlElement(ElementName = "Job")]
public string Job { get; set; }
[XmlIgnore]
[JsonIgnore]
public int Height { get; set; } //不进行序列化
}
public class StationInfo
{
[XmlAttribute("id")]
public string ID { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "DateTime")]
public string DateTime { get; set; }
}
public class ServerInfo
{
[XmlAttribute("id")]
public string ID { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "IP")]
public string IP { get; set; }
}
[Serializable]
[XmlRoot(ElementName = "Info")]
public class SerializeInfo
{
[XmlElement(ElementName = "User")]
[JsonProperty(PropertyName = "User")]
public List<UserInfo> userInfos = new List<UserInfo>();
[XmlElement(ElementName = "Station")]
[JsonProperty(PropertyName = "Station")]
public List<StationInfo> stationInfos = new List<StationInfo>();
[XmlElement(ElementName = "Server")]
[JsonProperty(PropertyName = "Server")]
public List<ServerInfo> serverInfos = new List<ServerInfo>();
}
}
4.最后就是主函数先从文件中读取字符串执行反序列化,再执行序列化的操作了
string jsondata = System.IO.File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "JsonFile.json");
ISerialize jsonSerialize = new JsonSerialize();
SerializeInfo serializes = jsonSerialize.Deserialize(jsondata) as SerializeInfo;
Console.WriteLine("Json序列化:\n{0}", jsonSerialize.Serialize(serializes));
Console.ReadLine();
输出结果: | ![]() |