Json序列化和反序列化(C#)

在工作中对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();
输出结果:



猜你喜欢

转载自blog.csdn.net/a519736285/article/details/80803428