0

我编写了一个程序,它可以处理删除和更新、存储和搜索等文件以及所有客户,但是我在类 srialize 中的反序列化方法有一个问题。

我不断收到以下错误:

“System.String”类型的对象无法转换为“System.Int32”类型

项目文件

视频

    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++)
        {
            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, 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, stringProps[i], null);
            }
            else
            {
                i--;
            }
            propIndex++;
        }
        return obj;
    }
4

1 回答 1

1

当您通过反射设置数据类型时,您仍然必须转换数据类型,修改您的代码以包含转换,如下所示

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++)
        {
            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, stringProps[i], null);
            }
            else
            {
                i--;
            }
            propIndex++;
        }
        return obj;
    }
于 2013-11-11T17:36:13.413 回答