第二天我试图解决我的问题,我想我需要一些帮助来做到这一点。 = /
所以,我试图为我的项目创建一个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中正确地完成它。
答案 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>