【问题标题】:Serialization of XML in Silverlight 5Silverlight 5 中的 XML 序列化
【发布时间】:2011-11-25 02:20:19
【问题描述】:

我手头有点困惑,希望你能帮忙。

我一直在为 Silverlight 4 中的客户端开发 Silverlight 应用程序。但是很明显,我需要一个按钮来允许全屏模式。这很好,很花哨,但是在全屏模式下,Silverlight 4 出于安全原因禁用了大部分键盘输入......所以全屏模式以使将数据输入 ChildWindowForms 变得更容易的原因变得毫无意义。

我应该指出,我不能让这个应用程序脱离浏览器,因为它必须位于 Dynamics CRM 2011 中才能获取上下文并记录它所在的 ID。

因此,我开始尝试使用 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 中它不“信任”XmlSerializer 我用来读取某些 XML 配置并反序列化为 .Net 对象的对象

经过一番挖掘,似乎镇上有一个新的序列化器可以为 Silverlight 5 执行此操作,DataContractSerializer 所以我想,太好了,我可以修改一些序列化代码,一切都会好起来的。可惜不是这样。

似乎这个版本的序列化器在这个版本中快了 33%。它更快的原因是 XML 中的所有节点都必须按字母顺序排列。如果它们不在此顺序中,则它们被读入为空。 (如果它们碰巧在正确的位置,它们将被正确读取。)

所以我的问题是这样的。 我是否别无选择,只能将我所有的 XML 配置文件按字母顺序重新组织以适应这个新的序列化器,或者有没有办法使用旧的 XML 序列化器并让 Silverlight 5 信任它?

【问题讨论】:

    标签: c# xml silverlight dynamics-crm-2011 silverlight-5.0


    【解决方案1】:

    首先,DataContractSeriailiser 并不是 Silverlight 5 的新功能,它以前就存在。

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

    【讨论】:

    • 所以无论是否按字母顺序,Xml 都必须按定义的顺序排列?如果节点存在于该级别,它不能只匹配节点吗?
    • @Chris:是的,这似乎是它的行为方式。我创建了简单的数据契约并将其应用于两个相同的类,它们之间的唯一区别是 DataMember 属性上的 Order 属性的值。它们将无法正确地相互操作。使Order 值彼此一致(无论应用什么实际排序)并且一切正常。有趣的是,DataContractJsonSerilizer 似乎没有不匹配的排序问题(这对您没有任何帮助)。
    • 感谢 Anthony,我想重新排序 xml 或定义合同成员订单是我唯一的选择。现在要弄清楚从长远来看哪个会更容易!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多