如何判断对象中的属性的数据类型

微醺_zZ 2010-06-24 09:57:35
突然想写一个ToJson的转换类,在应用中有一个实体类,其中有一个属性必须定义成集合
在转换的时候需要在json中体现所有的数据
var json = [{a:1,{c:3}}];

如何在json转换的方法中判断这个属性是集合,之后遍历他
...全文
962 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-06-24
  • 打赏
  • 举报
回复
判断类型typeof,is都是可以的
阿非 2010-06-24
  • 打赏
  • 举报
回复
如果你的List 中 不止 string 和 customClass 两种类型 ,那当前方案可能不适用。

不过,我觉得 string 与 customClass 应该是够了。
阿非 2010-06-24
  • 打赏
  • 举报
回复

foreach (object item in array)
{
jsonString += item + ","; //普通集合转换
jsonString +=ToJsonAll(item) + ",";//对象集合转换
}



=>


foreach (object item in array)
{
if(item is string)
{
jsonString += item.ToString() + ","; //普通集合转换
}
else
{
jsonString +=ToJsonAll(item) + ",";//对象集合转换
}
}



我本想说 as 操作符的,不过 is 就可以了。
微醺_zZ 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sandy945 的回复:]

你不需要判断集合 是 List<string> 还是 List<Object>

你需要判断的是 集合中的子项 是什么类型。

与 is 相似的操作符 还有一个, 你应该使用它
[/Quote]

7楼说的对,是判断集合中的子项是什么类型,你说的与 is 相似的操作符是 typeof么?

那么我该怎么判断子项是一个对象类型还是一个普通类型呢,请给点详细的提示,谢谢了
showlin 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liyb5619 的回复:]
上面写错了,更正

C# code

//用来获取属性的类型,如果不是对象类型,就没有Get方法,这句会报错误,如何加判断呢?
object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);
[/Quote]
可以先使用PropertyInfo的CanRead和CanWrite属性判断
或者
判断获取的MethodInfo是否为null
propertyInfo[i].GetGetMethod()
阿非 2010-06-24
  • 打赏
  • 举报
回复
你不需要判断集合 是 List<string> 还是 List<Object>

你需要判断的是 集合中的子项 是什么类型。

与 is 相似的操作符 还有一个, 你应该使用它


微醺_zZ 2010-06-24
  • 打赏
  • 举报
回复
上面写错了,更正

//用来获取属性的类型,如果不是对象类型,就没有Get方法,这句会报错误,如何加判断呢?
object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);


微醺_zZ 2010-06-24
  • 打赏
  • 举报
回复
谢谢4楼的回答
按你的说法写了一个判断的代码

if (objectValue is IEnumerable)


有没有可能判断出具体的集合类型,比如:
普通集合:List<string>
对象集合:List<Object>

因为对于这两种集合的遍历方式是不同的


foreach (object item in array)
{
jsonString += item + ","; //普通集合转换
jsonString +=ToJsonAll(item) + ",";//对象集合转换
}



ToJsonAll(object jsonObject) 方法中有2句代码:

//用来获得参数对象的所有属性
PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();

//用来获取属性的类型,如果不是集合类型,这句会报错误,如何加判断呢?
object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);


调试代码地址:http://blog.csdn.net/liyb5619/archive/2010/06/21/5683577.aspx
showlin 2010-06-24
  • 打赏
  • 举报
回复
可遍历的都实现了IEnumerable接口的
本身通过GetType()方法也可以获取属性的Type实例
宇峰科技 2010-06-24
  • 打赏
  • 举报
回复
帮顶了
微醺_zZ 2010-06-24
  • 打赏
  • 举报
回复
难道CSDN上午没人看帖么...
怎么每人回答,貌似高手10:00已经开始上班了啊
微醺_zZ 2010-06-24
  • 打赏
  • 举报
回复
补充:是使用C#判断对象的某一个属性的类型,如果是list<T> 那么就对这个集合进行遍历
最后拼接成:
var json = [{a:1,b:{c:3}}];
这种形式
smthgdin_020 2010-06-24
  • 打赏
  • 举报
回复
typeof gettype 这类的。
微醺_zZ 2010-06-24
  • 打赏
  • 举报
回复
To : Sandy945 as 是转换用的吧,怎么能跟is一样呢,JAVA中as是比较用的
按照目前的应用一个string类型是够用的,但我就想写一个万用转换类,呵呵,貌似我这个想法不太实际

唉,忙乎了半天,网上原来有个开源的转换工具,据说比.net自带的好,试试

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧