У меня есть PCL, нацеленный на .NET Framework 4.5 и Xamarin.Android, среди прочего.
В рамках PCL я создаю XmlSerializer следующим образом:
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes overrideAttributes = GenerateOverrideAttributes(dType, pType, attr);
overrides.Add(dType, prop.Name, overrideAttributes);
_serializer = new XmlSerializer(tType, overrides);
Здесь:dType - это класс с именем UIVisibleNode,pType - это абстрактный класс с именем UINode,prop.Name - «Children», и оно ссылается на свойство UIVisibleNode, которое является
List<UINode>
В GenerateOverrideAttributes () я создаю XmlAttributes с XmlElementAttribute для каждого класса, который наследуется от UINode.
Когда я запускаю проект Windows, который использует PCL, XmlSerializer работает так, как я хочу, со следующим XML:
<layout width=".25" height =".25" x="0" y="0" id="portrait" class="render">
<background color="white">
<div x=".03" y=".05" width=".94" height =".9" layout="proportional_rows" paddingX=".01" paddingY=".02">
<background color="black">
</background>
<background color="gray" multiplier="3" padding=".1">
<label color="white" font="emulogic.ttf" fontSize="15">Test UI</label>
</background>
<br brSize="1" />
<background class="back,Lab" color="green">
<label class="Lab" color="white" font="emulogic.ttf" fontSize="15">GREEN</label>
</background>
<background color="red">
<label class="Lab" color="white" font="emulogic.ttf" fontSize="15">RED</label>
</background>
<background color="blue">
<label class="Lab" color="white" font="emulogic.ttf" fontSize="15">TLUE</label>
</background>
<background color="blue">
<label class="Lab" color="white" font="emulogic.ttf" fontSize="15">BLUE</label>
</background>
</div>
</background>
</layout>
Это означает, что когда я десериализую этот XML, я получаю класс UILayoutNode (который наследует UIVisibleNode) и десериализованный UILayoutNode имеет свойство «Children», содержащее один класс UIBackground, чьи дочерние элементы являются единственным классом UIDiv, который имеет 6 UIBackgrounds и 1 UIBr в качестве своих дочерних элементов (и т.Проект, использующий PCL, пытается десериализовать тот же XML, полученный UILayoutNode не имеет дочерних элементов.
Я искал и не могу найти много об этом, за исключением потенциально этого: https://github.com/xamarin/Xamarin.Forms/issues/2542
Я принимаю это, чтобы означать, что такая функциональность нена стороне андроида?Или есть еще какие-то идеи, которые мне здесь не хватает?