Моно Android XmlSerializer не использует XmlAttributeOverrides - PullRequest
0 голосов
/ 11 октября 2018

У меня есть 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

Я принимаю это, чтобы означать, что такая функциональность нена стороне андроида?Или есть еще какие-то идеи, которые мне здесь не хватает?

...