XML을 C # 개체 (개체 배열 포함)로 역 직렬화하려고합니다.
수업은 다음과 같습니다.
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1015")]
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute("I-collection", Namespace = "urn:xtk:queryDef", IsNullable = false)]
public partial class MyCollection
{
private List<I> itemsField;
public MyCollection()
{
this.itemsField = new List<I>();
}
[System.Xml.Serialization.XmlElementAttribute("I", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 0)]
public List<I> Items
{
get
{
return this.itemsField;
}
set
{
this.itemsField = value;
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1015")]
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class I
{
private string EMAILField;
private string FIRST_NAMEField;
private string INDIVIDUAL_KEYField;
private string LANGUAGE_CODEField;
private string LAST_NAMEField;
private string USERNAMEField;
[System.Xml.Serialization.XmlAttributeAttribute()]
public string EMAIL
{
get
{
return this.EMAILField;
}
set
{
this.EMAILField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string FIRST_NAME
{
get
{
return this.FIRST_NAMEField;
}
set
{
this.FIRST_NAMEField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string INDIVIDUAL_KEY
{
get
{
return this.INDIVIDUAL_KEYField;
}
set
{
this.INDIVIDUAL_KEYField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string LANGUAGE_CODE
{
get
{
return this.LANGUAGE_CODEField;
}
set
{
this.LANGUAGE_CODEField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string LAST_NAME
{
get
{
return this.LAST_NAMEField;
}
set
{
this.LAST_NAMEField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string USERNAME
{
get
{
return this.USERNAMEField;
}
set
{
this.USERNAMEField = value;
}
}
}
역 직렬화 시도
MyCollection result = Serialization.Deserialize<MyCollection>(xmle.OuterXml);
여기서 xmle.OuterXml은
<I-collection xmlns="urn:xtk:queryDef">
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="5" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="UPed" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="6" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="GO" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="7" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="ir0" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="8" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="UPlqfa" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="9" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="jon17" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="10" LANGUAGE_CODE="N/D" LAST_NAME="" USERNAME="ctu_aa4849_jie" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="11" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="rnopwakc" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="12" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="TRIsd" />
<I EMAIL="[email protected]" FIRST_NAME="" INDIVIDUAL_KEY="13" LANGUAGE_CODE="ENG" LAST_NAME="" USERNAME="ll20373196" />
<I EMAIL="[email protected]" FIRST_NAME="Sa" INDIVIDUAL_KEY="14" LANGUAGE_CODE="FRA" LAST_NAME="w" USERNAME="wsp" />
</I-collection>
Serialization.Deserialize는 다음을 수행합니다.
public static T Deserialize<T>(string xml)
{
if (string.IsNullOrEmpty(xml))
{
throw new ArgumentNullException("xml");
}
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StringReader stream = new StringReader(xml))
{
try
{
return (T)serializer.Deserialize(stream);
}
catch (Exception ex)
{
throw new InvalidOperationException("Failed to create object from xml string", ex);
}
}
}
문제는 반환하는 객체가 비어 있다는 것입니다 (itemField List가 비어 있음을 의미합니다). 이 역 직렬화는 실제로 XML의 데이터를 사용하여 목록을 자동으로 채워야합니다. 아니면 수동으로해야합니까?
은 Form
잘못된 것입니다; 시험:
[System.Xml.Serialization.XmlElementAttribute("I", Order = 0)]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다