如何解决xsd2code-反序列化xml文件的问题
| 过去,我手动创建了自己的xml序列化类。但是现在我想自动执行。 所以我找到了微软的XSD工具。不幸的是,我遇到了该实用程序(CS030等)的错误。 但是接下来,我发现外观很棒的开源工具XSD2CODE http://xsd2code.codeplex.com/ 一切看起来都很不错,直到我发现并不是我的所有xml数据都已反序列化(大声笑)。 我的XML:<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<MySettings xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<AdminPassword>Admn1234</AdminPassword>
<ImagesFolder></ImagesFolder>
<Resolutions>
<Resolution id=\"1024x768\">
<Width>1024</Width>
<Height>768</Height>
<Panel id=\"top\">
<Height>603</Height>
<LocationOnMainForm>
<X>0</X>
<Y>0</Y>
</LocationOnMainForm>
<Background>1_panel_top_background.jpg</Background>
<Buttons>
<Button id=\"pbMainTopComp\">
<Background>panel_top_btn_info.jpg</Background>
<Location>
<X>27</X>
<Y>123</Y>
</Location>
<OnClickOpenLink>http://www.google.com</OnClickOpenLink>
</Button>
<Button id=\"pbMainTopSelf\">
<Background>panel_top_btn_self.jpg</Background>
<Location>
<X>360</X>
<Y>123</Y>
</Location>
<OnClickOpenLink>http://www.yahoo.com</OnClickOpenLink>
</Button>
</Buttons>
</Panel>
<Panel id=\"bottom\">
<LocationOnMainForm>
<X>0</X>
<Y>603</Y>
</LocationOnMainForm>
<Height>165</Height>
<Background>panel_bottom_background.jpg</Background>
<Buttons>
<Button id=\"pbMainBottomPages\">
<Background>panel_bottom_btn_pages.jpg</Background>
<Location>
<X>38</X>
<Y>39</Y>
</Location>
<OnClickOpenLink/>
</Button>
<Button id=\"pbMainBottomReport\">
<Background>panel_bottom_btn_report.jpg</Background>
<Location>
<X>344</X>
<Y>39</Y>
</Location>
<OnClickOpenLink>http://www.bing.com</OnClickOpenLink>
</Button>
</Buttons>
</Panel>
</Resolution>
</Resolutions>
</MySettings>
当我使用标准方法反序列化时,出现错误。
MySettings mySettings = new MySettings();
using (TextReader textReader = new StreamReader(@\"settings_test.xml\"))
{
XmlSerializer xSerializer = new XmlSerializer(typeof(MySettings));
mySettings = (MySettings)xSerializer.Deserialize(textReader);
}
当我使用反序列化方法中内置的Xsd2Code时:
MySettings mySettings = new MySettings();
bool isOk = MySettings.LoadFromFile(@\"settings_test.xml\",out mySettings);
string pass = mySettings.AdminPassword;
foreach (MySettingsResolutionsResolution item in mySettings.Resolutions)
{
string height = item.Height;
foreach (MySettingsResolutionsResolutionPanel panel in item.Panel)
{
string bckg = panel.Background;
foreach (MySettingsResolutionsResolutionPanelButtonsButton btn in panel.Buttons)
{
string btnBckg = btn.Background;
}
}
}
那么我没有错误,但是并非所有数据都从xml反序列化。
例如:
我的Xsd2Code设置:
谁能建议我:
我做错了什么以及如何纠正这个问题?
要么
为我的XML(XML之上)提出另一个自动化的工作解决方案。
提前非常感谢所有建议。解决方法
在我的情况下,它是在
XmlElementAttribute
(即Order = 4
)中添加订单参数。
如果删除了order参数,它就可以正常工作。我找不到一种防止XSD2CODE
生成类时包括order参数的方法。,有几个问题可能导致这种情况:
块内xml中元素的无效顺序,然后,如果您实际上不关心该顺序,只需将其替换为xsd中的元素(它将从KenE答案的生成代码中删除XmlElementAttribute)。
或更简单的情况是xml中的一个错误,例如添加到现有元素(xsd2code在脱盐期间不会失败,但会忽略该元素)
希望能帮助到你版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。