0

Posted

技术标签:

【中文标题】'|' 分隔的字符串序列化的通用对象【英文标题】:Generic Object to '|'-separated string serialization 【发布时间】:2010-10-25 17:04:26 【问题描述】:

我已经为 .net 2.0 编写了这个类方法,以从“|”分隔的字符串创建对象,反之亦然。

但问题是,在继承类型的情况下,它们没有给出正确的结果,即继承的属性排在最后,并且以“|”分隔的字符串形式提供的数据序列不起作用。

例如:

class A

    int ID;


class B : A

    string Name;

字符串是“1|John”。这些方法读取为 name==1 和 ID=="John"。

请告诉我怎么做。

public class ObjectConverter<T>
    
        public static T TextToObject(string text)
        
            T obj = Activator.CreateInstance<T>();
            string[] data = text.Split('|');
            PropertyInfo[] props = typeof(T).GetProperties();
            int objectPropertiesLength = props.Length;            

            int i = 0;

            if (data.Length == objectPropertiesLength)
            
                for (i = 0; i < objectPropertiesLength; i++)
                
                    props[i].SetValue(obj, data[i], null);
                
            

            return obj;
        

        public static string ObjectToText(T obj)
        
            StringBuilder sb = new StringBuilder();

            Type t = typeof(T);

            PropertyInfo[] props = t.GetProperties();

            int i = 0;
            foreach (PropertyInfo pi in props)
            
                object obj2 = props[i++].GetValue(obj, null);

                sb.Append(obj2.ToString() + "|");
            

            sb = sb.Remove(sb.Length - 1, 1);

            return sb.ToString();
        
    

【问题讨论】:

【参考方案1】:

我认为运行时无法保证当您调用 getproperties 时,属性信息对象将始终处于相同的顺序。您将需要执行一些操作,例如获取属性名称列表对它们进行排序,并对序列化和反序列化使用相同的排序。

至少有 3 种方法可以序列化 .net 中内置的对象,您是否有理由不使用其中一种

【讨论】:

以上是关于0的主要内容,如果未能解决你的问题,请参考以下文章

每日算法刷题-DFS题目

每日算法刷题-DFS题目

443M衣架遥控arduino代码备档

如何修改蒙版以使其成为完美的圆形

如何从文件中读取二维数组的元素数?

棋盘游戏的 int 数组