json转对象-对象转json
我们经常会用到json,所以在c#里就会经常有对象or对象数组转json,json转对象or对象数组。
ps:对象或者json可能是{}or[],也就是json属性or json数组形式,或者json对象属性里嵌套,嵌套属性....无限级嵌套都可以实现。
前提:我们定义的对象,或者嵌套对象 一定要和json格式结构完全一样!
重点说第一个和最后一个,个人建议用最后一个简单并强大
定义对象:
public class Person { public string Name { get; set; } public int Age { get; set; } }
第一种方法:
借用两个自定义方法,如下:
private Object JsonToObj(String json, Type t) { try { System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) { return serializer.ReadObject(ms); } } catch { return null; } } private string ObjToJson<T>(T data) { try { System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType()); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, data); return Encoding.UTF8.GetString(ms.ToArray()); } } catch { return null; } }
使用如下:
任意格式和嵌套的json转对象:
jsonStr是json字符串
Person data = new Person();
data = JsonToObj(jsonStr, typeof(Person)) as Person; //如果是List对象,就把Person都换成List<Person>即可。
对象转任意格式和嵌套的json字符串:
jsonStr= ObjToJson<PlayerPet>(newdata);
最后一种方法:强烈推荐
任意格式和嵌套的json转对象:
jsonStr是json字符串
Person data = new Person();
data = (Person)JsonConvert.DeserializeObject(jsonStr, typeof(Person)); //如果是List对象,就把Person都换成List<Person>即可。
对象转任意格式和嵌套的json字符串:
jsonStr= JsonConvert.SerializeObject(newdata);
最后一种方法只需要引用:using Newtonsoft.Json;即可,无需单写方法