XmlSerializer 클래스를 사용하여 XML 파일을 직렬화하려고합니다. Xml 구조는 다음과 같습니다.
<?xml version="1.0"?>
<Datatable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Assets>
<A_elements>
<A_el ID="1">
<Fields>
<Field Hint="First field">
<Title> A_field </Title>
<Value> 111 </Value>
</Field>
<Field Hint="Second field">
<Title> B_field </Title>
<Value> 222 </Value>
</Field>
.....
.....
</Fields>
</A_el>
</A_elements>
</Assets>
</Datatable>
[XmlElement ( "")]를 지정할 때 필드 값에 액세스하려면 어떻게해야합니까?
예를 들어,이 xml에서로드 된 내 C # 개체를 다음과 같이 읽을 수 있기를 원합니다. LoadedObject.Assets.A_elements[0].A_field
위 코드의 출력은 "111"이어야합니다.
이 프로브를 이런 식으로 해결하려고합니다.
[XmlRoot("Assets"), Serializable]
public class Assets
{
[XmlElement("A_elements")]
public Actors actors { get; set; }
}
public class A_elements
{
[XmlElement("A_elements")]
public List<A_el> A_elList { get; set; }
}
public class A_el
{
[XmlAttribute("ID")]
public int id { get; set; }
[------??????------]
public string A_field { get; set; }
}
필드에는 고유 식별자가 없으며 모든 요소에 많은 필드가 있습니다. 도움을 주시면 감사하겠습니다.
미리 감사드립니다.
A_el 클래스에 Field [] Fields 멤버를 만들고 Hint, Title 및 Value 멤버가있는 해당 Field 클래스를 만듭니다.
public class A_el
{
[System.Xml.Serialization.XmlAttribute("ID")]
public int id { get; set; }
[System.Xml.Serialization.XmlArray(ElementName = "Fields")]
[System.Xml.Serialization.XmlArrayItem("Field", typeof(Field))]
public Field[] Fields { get; set; }
private string[] _A_elements;
private string[] A_elements
{
get
{
if(null == _A_elements)
{
_A_elements = (from field in Fields select field.Value).ToArray();
}
return _A_elements;
}
}
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class Field
{
public string Title { get; set; }
public string Value { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Hint { get; set; }
}
유용한 팁 : 직렬화에서 C # 개체를 생성하려면 프로젝트에 cs 파일을 추가하고 엽니 다. 직렬화하려는 XML을 복사하고 cs 파일에 커서를 놓고 붙여 넣는 대신 편집 메뉴에서 선택하여 붙여 넣기를 선택합니다. '클래스로 XML 붙여 넣기'옵션이 제공됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다