xml 기반의 구성 파일 (app.config 아님)을로드 할 프로그램을 만들고 있습니다.xml (de) serialization과 함께 일반 xml 데이터가 필요합니까?
이 구성 파일에서 프로그램에서 인스턴스화해야하는 유형을 지정하고 구성합니다.
는 여기에 내가이 구상하는 방법의 예 : 안쪽 요소가 문제 <type-configuration>
입니다
<?xml version="1.0"?>
<configuration>
<types>
<type assembly="SomeAssembly.dll" class="SomeAssembly.SomeClass">
<type-configuration>
<address>192.168.0.1</address>
<port>80</port>
</type-configuration>
</type>
</types>
</configuration>
있다. 내부의 요소는 SomeAssembly.SomeClass
이 필요로하는 특정 구성에 따라 달라지며 프로그램에 "알려진"것이 아닙니다. 새로운 유형을 추가함으로써
, 그 부분은 다음과 같습니다
<type assembly="SomeAssembly.dll" class="SomeAssembly.SomeClass">
<type-configuration>
<address>192.168.0.1</address>
<port>80</port>
</type-configuration>
</type>
<type assembly="SomeOtherAssembly.dll" class="SomeOtherAssembly.SomeOtherClass">
<type-configuration>
<url>http://www.domain.com/path/to/webpage</url>
<authentication-token>1234567890ABC</authentication-token>
</type-configuration>
</type>
내가 강력한 형식의 객체로 위의 XML 파일을 역 직렬화, 여전히 나와 함께 그 하위 XML 부분을 수행 할 수있는 방법이 있나요 그래서 유형 자체가이를 자체 오브젝트로 비 직렬화 할 수 있습니까?
즉. 내가 그 SubType.Configuration
속성을 선언하려면 어떻게
[XmlType("configuration")]
public class Configuration
{
[XmlElement("types")]
public Collection<SubType> Types
{
...
}
}
[XmlType("type")]
public class SubType
{
[XmlElement("configuration")]
public ??? Configuration { get; set; }
}
: 내 프로그램의 구성 클래스는 다음과 같이 될 수 있을까? 그게 가능한가?
결국 속성에있는 데이터는 구성 파일에 지정된 유형의 인스턴스화 된 개체에 제공됩니다. 난 아직 그 부분을 작성하지 않은, 그래서 무엇이든 내가 원하는 것을 보여주는, 내가 들어 왔 얼마나 멀리 여기
완전한 LINQPad 프로그램입니다, 정말 괜찮을 것 일 것입니다 :void Main()
{
const string xml = @"<?xml version=""1.0""?>
<configuration>
<types>
<type assembly=""SomeAssembly.dll"" class=""SomeAssembly.SomeClass"">
<type-configuration>
<address>192.168.0.1</address>
<port>80</port>
</type-configuration>
</type>
<type assembly=""SomeOtherAssembly.dll"" class=""SomeOtherAssembly.SomeOtherClass"">
<type-configuration>
<url>http://www.domain.com/path/to/webpage</url>
<authentication-token>1234567890ABC</authentication-token>
</type-configuration>
</type>
</types>
</configuration>";
var serializer = new XmlSerializer(typeof(Configuration));
using (var reader = new StringReader(xml))
{
var configuration = (Configuration)serializer.Deserialize(reader);
configuration.Dump();
}
}
[XmlType("configuration")]
public class Configuration
{
private readonly Collection<SubType> _Types = new Collection<SubType>();
[XmlArray("types")]
public Collection<SubType> Types
{
get
{
return _Types;
}
}
}
[XmlType("type")]
public class SubType
{
private readonly Collection<XmlNode> _Configuration = new Collection<XmlNode>();
[XmlAttribute("assembly")]
public string AssemblyName { get; set; }
[XmlAttribute("class")]
public string ClassName { get; set; }
[XmlElement("type-configuration")]
public Collection<XmlNode> Configuration
{
get
{
return _Configuration;
}
}
}
이 의지 두 SubType
개체를 덤프하지만 Configuration
속성에는 <type-configuration>...</type-configuration>
부분의 첫 번째 하위 요소 만 포함됩니다. 속성 유형을 string
으로 변경하면 가장 안쪽에있는 텍스트 만 제공됩니다. IP 주소 나 URL을 XmlDocument
으로 변경하면 XmlNode
과 동일하게 나타납니다.
위의 질문에서 틀린 꼬리표 및/또는 제목 및/또는 용어를 사용하여 올바른 것을 편집하십시오. –