У меня есть проблема десериализации список список в моем файле XML:C# DataContractSerializer - Deserialize список список
<?xml version="1.0" encoding="UTF-8"?>
<RootLevel><!--Container-->
<ListOfOne><!--List of One -->
<One>
<ListOfTwo> <!--List of Two -->
<Two></Two>
</ListOfTwo>
</One>
</ListOfOne>
</RootLevel>
RootLevel имеет Список One. Один имеет список из двух
Первый уровень (ListOfOne) работает файл с любой проблемой, проблема заключается в том, что ListOfTwo не будучи десериализован
[KnownType(typeof(List<One>))]
[DataContract(Name = "RootLevel", Namespace = "")]
public sealed class RootLevel
{
[DataMember()]
public List<One> ListOfOne { get; set; }
public RootLevel()
{
ListOfOne = new List<One>();
}
}
[DataContract(Name = "One", Namespace = "")]
[KnownType(typeof(List<Two>))]
public sealed class One
{
public One()
{
ListOfTwo = new List<Two>();
}
[OnDeserialized]
internal void OnSerializingMethod(StreamingContext context)
{
ListOfTwo = new List<Two>();
}
[DataMember]
public List<Two> ListOfTwo { get; set; }
}
[DataContract(Name = "Two", Namespace = "")]
public sealed class Two
{}
Это операция:
using (var fs = new FileStream("path to file", FileMode.Open))
{
using (var reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()))
{
DataContractSerializer ser = new DataContractSerializer(typeof(RootLevel));
var deserializedPerson = (RootLevel)ser.ReadObject(reader, true);
Assert.IsTrue(deserializedPerson.ListOfOne[0].ListOfTwo.Count > 0);
reader.Close();
fs.Close();
}
}
Спасибо, но я уже был там. не работает. –
Пожалуйста, смотрите мое обновление, я запускаю код, и он работает. Если вы не проверите свой XML-файл, это соответствует вашему примеру. Попробуйте запустить код, который я предоставил. –
Хорошо, я буду указывать V, потому что он работает, и спасибо за это. Но странно, что List в XML должен быть первым, иначе он будет null. почему это? если у меня есть другие члены выше списка, тест не проходит, можете ли вы объяснить? благодаря! –