나는 다음과 같은 XML 문서를 직렬화하기 위해 노력하고있어 :빈 컬렉션 XMLSERIALIZE 결과와 컬렉션을 직렬화 복원
<?xml version="1.0" encoding="utf-8" ?>
<TestPrice>
<Price>
<A>A</A>
<B>B</B>
<C>C</C>
<Intervals>
<Interval>
<A>A</A>
<B>B</B>
<C>C</C>
</Interval>
<Interval>
<A>A</A>
<B>B</B>
<C>C</C>
</Interval>
</Intervals>
</Price>
</TestPrice>
을 내가 세 가지 클래스 개체 그래프에이 역 직렬화하는 정의 :
public class TestPrice
{
private List<Price> _prices = new List<Price>();
public List<Price> Price
{
get { return _prices; }
set { _prices = value; }
}
}
public class Price
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
private List<Interval> _intervals = new List<Interval>();
public List<Interval> Intervals
{
get { return _intervals; }
set { _intervals = value; }
}
}
public class Interval
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
각 부분을 deserialize 할 수 있습니다. 그게 내가 할 수있다 :
var serializer = new XmlSerializer(typeof(Price));
var priceEntity = ((Price)(serializer.Deserialize(XmlReader.Create(stringReader))));
그리고 priceEntity
올바르게 List<Interval> Intervals
포함 stringReader
에 포함 된 XML 데이터로 초기화됩니다. 그러나 TestPrice
인스턴스를 deserialize하려고하면 항상 빈 List<Price> Price
이 표시됩니다.
이 같은 TestPrice
의 정의를 변경하는 경우 : 그것은 작동
public class TestPrice
{
public Price Price { get; set; }
}
합니다. 물론 XSD는 Price를 시퀀스로 정의합니다. 나는 다른 엔티티가 잘 디시 타리화할 수 있지만 루트 요소에는 시퀀스를 포함하지 않습니다. 내가 모르는 한계가 있습니까? TestPrice
에 일종의 메타 데이터를 포함해야하나요?
나는 제안 된대로 가격 컬렉션을 장식하고 예제를 실행했습니다. 아직도 빈 가격표를 돌려받습니다. 왜, xmlReader에 이미 가지고있는 serializer 대신에 새로운 XmlReader 인스턴스를 serializer에 전달하고 있습니까? – Cesar
@ Cesar, 죄송합니다. 독자와의 실수였습니다. 샘플을 수정했습니다. 이제는 효과가있다. –
재밌 네요, 똑같은 코드를 실행하면 작동합니다. 그러나 실제 코드에 적용하면 여전히 동일한 결과를 얻습니다. 어쨌든 적어도 작동해야한다는 것을 알기 때문에 받아 들인 것으로 표시하고 있습니다. 감사! – Cesar