C#.Net 4の使用-XMLサンプル(実際のサンプルには6つの属性があります)
<TestXML>
<TestElement attr1="MyAttr" attr2="1" DateAdded="">25</TestElement>
</TestXML>
私のクラス定義については、次のとおりです。
public class TestXML() {
public TestXML() {}
public int TestElement {get; set;}
[XmlAttribute]
public string attr1 {get; set;}
[XmlAttribute]
public string attr2 {get; set;}
[XmlIgnore]
public DateTime DateAdded {get; set;}
[XmlAttribute("DateAdded")]
public string dateadded {
get{ return (DateAdded == null ? "" : DateAdded.ToString();}
set{ if(!value.Equals("")) DateAdded = DateTime.Parse(value);}
}
}
逆シリアル化するコード:
string xml = "<TestXML><TestElement attr1=\"MyAttr\" attr2=\"1\" DateAdded=\"\">26</TestElement></TestXML>"
using (StringReader sr = new StringReader(xml)) {
XmlSerializer serializer = new XmlSerializer(typeof(TestXML));
TestXML myxml = (TestXML)serializer.Deserialize(sr);
}
今私たちが得る結果は(VSでオブジェクトを表示する)です:
myxml
attr1 | null
attr2 | null
TestElement | 25
なぜ属性が逆シリアル化されないのかについての完全な損失。
そのためには、2つのレベルが必要です。
[XmlRoot("TestXML")]
public class TestXml {
[XmlElement("TestElement")]
public TestElement TestElement { get; set; }
}
public class TestElement {
[XmlText]
public int Value {get;set;}
[XmlAttribute]
public string attr1 {get;set;}
[XmlAttribute]
public string attr2 {get;set;}
}
> 26 <
も問題を引き起こす可能性があります(空白)。あなたはそれがintの代わりに文字列である必要があるかもしれません。
TestElement
にあるはずの属性をTestXML
に定義しています。例:
@"<TestXML attr1=""MyAttr"" attr2=""1"">
<TestElement>26</TestElement>
</TestXML>"