我编写了一个程序,可以处理删除和更新,存储和搜索等文件。所有客户但是我遇到的问题是反序列化
当我点击任意一行时,我想要标签网格(客户网格),以便为特定客户看到。
但我认为主要问题在于这一行,这一行是Deseriailize方法。
var objProps = obj.GetType().GetProperties();
因为代码没有正确获取对象属性
public T Deserialize<T>(string entity)
{
var obj = Activator.CreateInstance<T>();
var stringProps = entity.Split(',');
var objProps = obj.GetType().GetProperties();
var propIndex = 0;
for (int i = 0; i < stringProps.Length; i++)
{
try
{
if (objProps[propIndex].PropertyType.FullName == "System.String")
{
objProps[propIndex].SetValue(obj, stringProps[i], null);
}
else if (objProps[propIndex].PropertyType.FullName == "System.Int32")
{
objProps[propIndex].SetValue(obj, Convert.ToInt32(stringProps[i]), null);
}
else if (objProps[propIndex].PropertyType.FullName == "System.DateTime")
{
var cultureInfo = new CultureInfo("fa-IR");
DateTime dateTime = Convert.ToDateTime(stringProps[i], cultureInfo);
objProps[propIndex].SetValue(obj, dateTime, null);
}
else
{
i--;
}
propIndex++;
}
catch (IndexOutOfRangeException)
{
Debug.WriteLine("Index Out Of range");
}
}
return obj;
}
答案 0 :(得分:1)
您的问题是,您正在呼叫Serializer.Deserialize<List<T>>(line)
,因此GetProperties()
会返回List<T>
的属性,而不是T
。他们是:
Int32 Capacity
Int32 Count
OrderItem Int32
因此,您尝试执行的代码是将stringProps[i]
值30/1/2008
分配给Int32 Count
属性。