C#의 리플렉션에 문제가있어 답변을 찾을 수 없습니다.상속 된 일반 형식을 통한 리플렉션
제네릭 형식에서 상속하는 클래스가 있는데이 클래스에서 T 형식을 검색하려고하지만 그럴 수 없다는 것이 밝혀졌습니다!
Type itemsType = destObject.GetType().GetGenericArguments()[0]
그것을 : 그래서 이런 유형을 얻기 위해 노력
class Products : List<Product>
{}
문제는 런타임에 내가 T.의 종류를 알 수 없다는 것입니다 : 여기
은 예입니다 잘 풀리지 않았다. 노드 제품이 상속 내 컬렉션 것,이 경우<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SETTINGS>
<PRODUCTS>
<PRODUCT NAME="ANY" VERSION="ANY" ISCURRENT="TRUE" />
<PRODUCT NAME="TEST1" VERSION="ANY" ISCURRENT="FALSE" />
<PRODUCT NAME="TEST2" VERSION="ANY" ISCURRENT="FALSE" />
</PRODUCTS>
<DISTRIBUTIONS>
<DISTRIBUTION NAME="5.32.22" />
</DISTRIBUTIONS>
</SETTINGS>
:
이public static object Deserialize(Type destType, XmlNode xmlNode)
{
object destObject = Activator.CreateInstance(destType);
foreach (PropertyInfo property in destType.GetProperties())
foreach (object att in property.GetCustomAttributes(false))
if (att is XmlAttributeAttribute)
property.SetValue(destObject, xmlNode.Attributes[property.Name].Value, null);
else if (att is XmlNodeAttribute)
{
object retObject = Deserialize(property.PropertyType, xmlNode.Nodes[property.Name]);
property.SetValue(destObject, retObject, null);
}
if (destObject is IList)
{
Type itemsType = destObject.GetType().GetGenericArguments()[0];
foreach (XmlNode xmlChildNode in xmlNode.Nodes)
{
object retObject = Deserialize(itemsType, xmlNode);
((IList)destObject).Add(retObject);
}
}
return destObject;
}
아이디어는 XML 파일을 읽고 객체에 변환하는 것입니다 : 여기
내 방법입니다 목록에서어떻게하는 방법에 대한 아이디어?
TKS들
감사합니다 SLaks! 그것은 일했다! –