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的主要内容,如果未能解决你的问题,请参考以下文章