xsd에서 생성 된 클래스 인스턴스를 만드는 일반적인 솔루션을 만들어야합니다. 예를 들면 : 인스턴스 만들기 및 런타임 어셈블리의 속성 할당
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="PS">
<xs:complexType>
<xs:sequence>
<xs:element name="P" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="FXs" maxOccurs="1" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="FX" minOccurs="1">
<xs:complexType>
<xs:attribute name="asOfDate" type="xs:date" use="required" />
<xs:attribute name="currency" type="xs:string" use="required" />
<xs:attribute name="rate" type="xs:decimal" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="PName" type="xs:string" />
<xs:attribute name="currency" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
나는 그것이 클래스 PS, PSP 및 PSFX있을 것이다이 XSD 런타임에서 어셈블리를 생성
. 이 경우 속성과 예상되는 것을 알고 있으므로 createinstance와 getproperties 및 setvalue가 작동합니다. 나는 포트폴리오가 Portfolio 포트폴리오의 배열을 가질 것이라는 것을 안다.case "PS":
if (p== null)
p= myAssembly.CreateInstance(cls.FullName);
break;
case "PSP":
myClass = myAssembly.CreateInstance(cls.FullName);
myClass.GetType().GetProperty("PName").SetValue(myClass, dt.Rows[0]["PortfolioName"].ToString(), null);
myClass.GetType().GetProperty("currency").SetValue(myClass, dt.Rows[0]["Currency"].ToString(), null);
if (myClasses == null)
myClasses = Array.CreateInstance(myClass.GetType(), deals.Count());
myClasses.SetValue(myClass, l);
l++;
portfolio.GetType().GetProperty("P").SetValue(p, myClasses, null);
지금 나는 어떤 XSD을 (단지 위)과 어셈블리를 생성 할 수 있습니다에서 일반적인 솔루션을 갖고 싶어. 이미 어셈블리를 생성했지만 지금은 내 질문에 동적으로 거기에 어떤 속성이 있는지 모르는 클래스 속성을 할당합니까? 제 말은 일반 솔루션을 만들 때 클래스가 다른 클래스의 객체 목록을 사용한다는 것을 어떻게 알 수 있습니까? 그래서 classnames와 propertynames를 하드 코딩하는 대신에 인스턴스와 속성을 얻을 수있는 방법이 있습니다. 위의 스 니펫에서 볼 수 있듯이 데이터 세트의 값을 속성에 할당하고 있습니다. 데이터베이스의 값을 columnname, attributename 및 parentnode로 저장하는 것이 계획입니다. P 노드의 PName 속성은 열 이름 Pname에서옵니다. 내 코드에 하드 코드가 없도록 디자인을 원합니다. 몇 가지 예 또는 디자인 아이디어를 제안 해주십시오.
죄송합니다. 제발 나와 함께 감옥에 보내주십시오. 제 의견이 맞지 않으면 알려주세요.