游戏UI Xml反序列化器

时间:2017-10-05 09:29:54

标签: c# xml user-interface xmlserializer

第二天我试图解决我的问题,我想我需要一些帮助来做到这一点。 = /

所以,我试图为我的项目创建一个UI,每个Stage(或屏幕,无论你如何命名)都将采用XML并从中构建对象。

基本上,我的代码看起来像这样:

舞台的基础课 - 所有其他课程都继承自这一课:

class BaseStage {
    [XmlIgnore]
    public Type Type;
    [XmlIgnore]
    public string XmlPath;
    public BaseChildren UIScheme;

    public BaseStage()
    {
        Type = GetType();
        XmlPath = "Template/" + Type.ToString().Replace("Some.Project.Namespace.", "") + ".xml";
    }

    public virtual void LoadContent()
    {
        if (File.Exists(XmlPath))
        {
            using (TextReader reader = new StreamReader(XmlPath))
            {
                XmlSerializer uiDeserializer = new XmlSerializer(typeof(BaseChildren));
                UIScheme = (BaseChildren)uiDeserializer.Deserialize(reader);
            }
        }
    }

一些UI类:

public class BaseChildren
{
    public List<BaseChildren> Children = new List<BaseChildren>();

    public virtual void AddChild(BaseChildrenchild)
    {
        Children.Add(child);
    }
}

public class Dialog : BaseChildren {
    public string Type;
    public Rectangle Position;
}
public class Label : BaseChildren {}
// ... and so on

我的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<UIScheme>
  <Children>
    <Dialog>
      <Type>Blue</Type>
      <Position>
        <X>43</X>
        <Y>100</Y>
        <Width>350</Width>
        <Height>200</Height>
      </Position>
    </Dialog>
  </Children>
</UIScheme>

我尝试了很多变化,并且不知道如何强制序列化程序加载这些对象= / 我还试图覆盖XmlSerializer并尝试编写自己的阅读功能,但是很难获得任何教程如何在Google中正确地完成它。

1 个答案:

答案 0 :(得分:0)

要进行快速检查,您可以使用此http://xmltocsharp.azurewebsites.net/

将xml转换为C#类
<table style="width: 95%; margin-top: 10px;" class="transferCertsTbl">
  <tr style="width: 95%">
      <td colspan="2">
          <asp:GridView ID="gvClearpassCertInfo" runat="server" AutoGenerateColumns="False" GridLines="None"
              CellSpacing="1" CellPadding="1"
              Width="95%" BorderWidth="0"
              AllowSorting="True"
              PageSize="30"
              OnRowDataBound="gvClearpassCertInfo_RowDataBound"
              CssClass="data responsive">
              <Columns>
                  <asp:TemplateField HeaderText="Select" SortExpression="">
                      <ItemTemplate>
                           <asp:RadioButton ID="radioChkCert" runat="server" onclick="RadioCheck(this);" /><input type="hidden" id="hdnCertId" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "CertId") %>' />
                      </ItemTemplate>
                  </asp:TemplateField>
                  <asp:BoundField DataField="CertificateID" HeaderText="Certificate ID" HeaderStyle-HorizontalAlign="Center" />
                  <asp:BoundField DataField="partID" HeaderText="Part Number"  HeaderStyle-HorizontalAlign="Center"/>
                  <asp:BoundField DataField="BaseLicense" HeaderText="Base License" Visible="false" />
              </Columns>
              <EmptyDataRowStyle CssClass="AlternatingRowStyle" />
              <HeaderStyle CssClass="HeaderStyle" HorizontalAlign="Center" />
              <RowStyle HorizontalAlign="Center" />
              <AlternatingRowStyle HorizontalAlign="Center" />
              <PagerSettings Visible="False" />
          </asp:GridView>
      </td>
  </tr>
</table>