2011-11-24 31 views
1

我的手上有一点问题,希望您可以帮忙。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信任它呢?

回答

1

首先,DataContractSeriailiser对Silverlight 5来说并不陌生。

我相信,按字母顺序排列的节点是默认的。 DataMemberAttribute你可以附加到每个属性被序列化有Order属性,你可以用它来指示他们出现的顺序。

+0

所以Xml必须按照定义的顺序,无论是否按字母顺序排列?如果它们存在于这个层次上,它不能匹配节点吗? – Chris

+0

@Chris:是的,这似乎是它的行为方式。我创建了简单的数据契约并将其应用于两个相同的类,其中唯一的区别在于'DataMember'属性上'Order'属性的值。他们不会正确地互相操作。使'Order'值相互一致(不管实际的排序是什么),并且一切正常。有趣的是,'DataContractJsonSerilizer'似乎没有顺序不匹配的问题(不是那对你有帮助)。 – AnthonyWJones

+0

感谢那安东尼,我想重新排序xml或定义合同成员订单是我唯一的选择。现在制定出长远来看哪个更容易! – Chris