0

我有一组由 XSD.exe 从 XSD 生成的类。我试图通过从 CSV 文件中读取数据来动态填充这些类上的一些字段。我遇到的问题是,任何代表其他生成的类的属性在创建根对象时都没有实例化,所以它们只是空的。

因此,例如,如果我创建一个具有 Sub_Message 类型的属性“field1”的根文档 Main_Message 的实例“doc”,则 doc.field1 为空,因此如果我尝试设置 doc.field1.name,我将得到一个异常.

我对如何解决这个问题的第一个想法是对这些对象属性进行读取时创建。由于生成的类是部分类,我可以为每个生成的类手动执行此操作,修改属性 getter。但是我真的很想避免这种方法。有很多生成的类,我不想在 XSD 更改时维护我的修改版本。

我的下一个想法是在读取 CSV 数据的代码中的类外部执行读取时创建。我将首先读取该属性,如果它为空,则创建该类的一个实例并将其分配给该属性,然后在该属性上设置该字段。但是我不知道该怎么做。我可以使用 Activator.CreateInstance(propertyType) 创建类的实例,但这会返回一个基本对象引用,如果没有强制转换,我无法将其分配给属性。但是我在编译时没有类型名称,所以我不能做那个演员。

所以我试图弄清楚如何处理这些生成的类以从 CSV 文件中读取字段值并填充文档对象上的字段,然后使用它们来创建 XML。我现在很困惑如何做到这一点。

4

1 回答 1

0

好的,经过大量搜索,我找到了一个可行的解决方案。

public static T Cast<T>(object o)
{
  return (T)o;
}

obj = Activator.CreateInstance(prop.PropertyType);
MethodInfo castMethod = typeof(MainClass).GetMethod("Cast").MakeGenericMethod(prop.PropertyType);
prop.SetValue(parent, castMethod.Invoke(null, new object[] { obj }), null);

所以我能够在运行时根据需要创建和分配属性。

于 2012-10-02T21:28:33.140 回答