我的手上有一点问题,希望您可以帮忙。Silverlight中的XML序列化5
我一直在为Silverlight 4中的客户端开发Silverlight应用程序。然而,很明显我需要有一个按钮来允许全屏模式。这很好,很花哨,但是在全屏模式下,出于安全原因,Silverlight 4禁用了大部分键盘输入.......所以全屏显示将数据输入到ChildWindowForms更容易的原因变得毫无意义。
我应该指出,由于不得不坐在Dynamics CRM 2011中以获取它所处的上下文和记录ID,因此我无法使该应用程序脱离浏览器。
因此开始我的forray变成silverlight 5.此版本允许应用程序在高级信任模式下在浏览器中运行。以前只能用作浏览器外模式。
全部都会很大,我已经想通了,我需要去签我的代码,添加一些注册表项和用户证书添加到受信任发布者的证书,并得到它的工作。真棒。
我的问题出现了,当我试图运行我的申请,有一个例外是这样的:
There is an error in XML document (1, 41). ---> System.TypeAccessException:
Attempt by security transparent method to access security critical type failed.
在这一点上,所有的智慧改变了代码是我已经使用证书签名我的项目。
看来,在Silverlight 5它不“信任”我用了一些XML配置读取和反序列化到.NET对象
一些挖似乎经过XmlSerializer
对象那里有一个新的串行在城里做这个Silverlight 5,DataContractSerializer
所以我认为,非常好,我可以修改一些序列化代码,一切都会好起来的。可悲的是,并非如此。
这个版本的Serializer似乎比这个版本快33%。它更快的原因是,XML中的所有节点都必须按字母顺序排列。如果他们不是这个顺序,他们被读入为空。 (如果他们碰巧处于正确的位置,他们会正确地读入。)
所以我的问题是这样的。 难道我没有选择,只能到我所有的XML配置文件重组为字母顺序,以适应这一新的Serialzer,或者是有使用旧的XML序列化,使Silverlight的5信任它呢?
所以Xml必须按照定义的顺序,无论是否按字母顺序排列?如果它们存在于这个层次上,它不能匹配节点吗? – Chris
@Chris:是的,这似乎是它的行为方式。我创建了简单的数据契约并将其应用于两个相同的类,其中唯一的区别在于'DataMember'属性上'Order'属性的值。他们不会正确地互相操作。使'Order'值相互一致(不管实际的排序是什么),并且一切正常。有趣的是,'DataContractJsonSerilizer'似乎没有顺序不匹配的问题(不是那对你有帮助)。 – AnthonyWJones
感谢那安东尼,我想重新排序xml或定义合同成员订单是我唯一的选择。现在制定出长远来看哪个更容易! – Chris