突然想写一个ToJson的转换类,在应用中有一个实体类,其中有一个属性必须定义成集合
在转换的时候需要在json中体现所有的数据
var json = [{a:1,{c:3}}];如何在json转换的方法中判断这个属性是集合,之后遍历他

解决方案 »

  1.   

    补充:是使用C#判断对象的某一个属性的类型,如果是list<T> 那么就对这个集合进行遍历
    最后拼接成:
    var json = [{a:1,b:{c:3}}];
    这种形式
      

  2.   

    难道CSDN上午没人看帖么...
    怎么每人回答,貌似高手10:00已经开始上班了啊
      

  3.   

    可遍历的都实现了IEnumerable接口的
    本身通过GetType()方法也可以获取属性的Type实例
      

  4.   

    谢谢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
      

  5.   

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

  6.   

    你不需要判断集合 是 List<string> 还是 List<Object>你需要判断的是 集合中的子项 是什么类型。与 is 相似的操作符 还有一个, 你应该使用它
     
      

  7.   

    可以先使用PropertyInfo的CanRead和CanWrite属性判断
    或者
    判断获取的MethodInfo是否为null
    propertyInfo[i].GetGetMethod()
      

  8.   


    7楼说的对,是判断集合中的子项是什么类型,你说的与 is 相似的操作符是 typeof么?那么我该怎么判断子项是一个对象类型还是一个普通类型呢,请给点详细的提示,谢谢了
      

  9.   


    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 就可以了。
      

  10.   

    如果你的List 中 不止 string 和 customClass 两种类型 ,那当前方案可能不适用。不过,我觉得 string 与 customClass 应该是够了。
      

  11.   

    判断类型typeof,is都是可以的
      

  12.   

    To : Sandy945 as 是转换用的吧,怎么能跟is一样呢,JAVA中as是比较用的
    按照目前的应用一个string类型是够用的,但我就想写一个万用转换类,呵呵,貌似我这个想法不太实际唉,忙乎了半天,网上原来有个开源的转换工具,据说比.net自带的好,试试
      

  13.   

    typeof gettype 这类的。