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;即可,无需单写方法

 

posted @ 2016-01-22 17:48  沙漠绿洲uibe  阅读(623)  评论(0编辑  收藏  举报