Json如何描述自己的对象类型
2011-07-14 17:17
295 查看
最近用Json来进行一些序列化和反序列化的操作,从中也学到了很多以前没有接触过的知识,昨天经理问了我一个问题,如果给你一个序列化好的Json,你将他反序列化出来以后如何得知这个Json的对象类型,这刚开始的时候确实没想到该怎么做,一点头绪都没有,想着强制转换但是因为不知道Json的对象类型,总不能一个个对象类型都试过去,后来经理教了我一个办法,因为C#的类型都是强类型,他最大的特点就是能自己说明自己,这样的话只需要在序列化对象类里面多写一个属性TypeFullName来存储该类的类型,然后在反序列化的时候将这个值显示出来,就能知道这条Json是什么类型的对象转化过来的了,下面上代码。
首先是对象类,这里我就随便定义了一个对象类:
namespace ConsoleApplication1
{
public class DemoDto
{
public DateTime AddTime { get; set; }
public string Id { get; set; }
public int Price { get; set; }
public string TypeFullName
{
get
{
if (string.IsNullOrEmpty(typeFullName))
{
typeFullName = this.GetType().FullName;//此处获得的值为ConsoleApplication1.DemoDto
}
return typeFullName;
}
set { typeFullName = value; }
}
}
}
接下来就是GetJsonObject(string Json)方法了,这个方法主要是实现Json的反序列化,先获取typeFullName字段的值,然后将该值作为一个Type再对Json进行一次反序列化,然后返回一个object: public static object GetJsonObject(string Json)
{
object o = JsonConvert.DeserializeObject(Json);
Console.WriteLine(o.GetType().ToString());
if (o is JObject)
{
string typeName =(string) (o as JObject).Property("TypeFullName").Value;
Type t = Type.GetType(typeName);
o=JsonConvert.DeserializeObject(Json,t);
Console.WriteLine(o);
return o;
}
return null;
}
然后就是因为不知道是什么类型,所以接下来的方法使用到了泛型的定义:
public static T GetGenericOBject<T>(string Json)
{
return (T)GetJsonObject(Json);//返回一个泛型指定的类型
}
首先是对象类,这里我就随便定义了一个对象类:
namespace ConsoleApplication1
{
public class DemoDto
{
public DateTime AddTime { get; set; }
public string Id { get; set; }
public int Price { get; set; }
public string TypeFullName
{
get
{
if (string.IsNullOrEmpty(typeFullName))
{
typeFullName = this.GetType().FullName;//此处获得的值为ConsoleApplication1.DemoDto
}
return typeFullName;
}
set { typeFullName = value; }
}
}
}
接下来就是GetJsonObject(string Json)方法了,这个方法主要是实现Json的反序列化,先获取typeFullName字段的值,然后将该值作为一个Type再对Json进行一次反序列化,然后返回一个object: public static object GetJsonObject(string Json)
{
object o = JsonConvert.DeserializeObject(Json);
Console.WriteLine(o.GetType().ToString());
if (o is JObject)
{
string typeName =(string) (o as JObject).Property("TypeFullName").Value;
Type t = Type.GetType(typeName);
o=JsonConvert.DeserializeObject(Json,t);
Console.WriteLine(o);
return o;
}
return null;
}
然后就是因为不知道是什么类型,所以接下来的方法使用到了泛型的定义:
public static T GetGenericOBject<T>(string Json)
{
return (T)GetJsonObject(Json);//返回一个泛型指定的类型
}
相关文章推荐
- fastJson如何序列化一个包含list对象的Map对象,如Map<String,List<T>>类型的对象
- java fastjson如何自定义转换含枚举类型对象(编程技巧)
- (php的弱类型导致的小问题)某变量可能是数字或非数字(对象、字符串、json等)时,应该如何去判断
- (php的弱类型导致的小问题)某变量可能是数字或非数字(对象、字符串、json等)时,应该如何去判断
- c#.net如何将API返回json对象转换成自己想要的List<T>
- controller中使用@RequestBody,Java如何传递json对象访问接口,以及对象中的时间类型
- java fastjson如何自定义转换含枚举类型对象(编程技巧)
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- 关于如何将含有Date类型属性的对象转换成符合实际应用的Json字符串
- Golang 奇葩的时间包之Json与struct对象之间互相转换,JsonDate和JsonTime自定义类型如何实现json编码和解码(二)
- javascript中如何做对象的类型判断
- 举例讲解如何判断JavaScript中对象的类型
- 前台如何将多个json对象传入java后台
- 在控制器的Action中,如何直接使用JsonResult方法中传递到前台的对象
- object对象如何转json格式
- 如何根据基本类型(值类型)动态生成对象
- ASP.NET MVC3如何用JQuery传递数组(集合)类型参数给JsonResult Action
- JSON 对象如何转换为 Html 表单
- 带方括号的字符串如何转换成json对象
- js中如何将字符串转换成json类型