序列化代码示例中的无限循环

2024-01-22

看看下面的代码here https://web.archive.org/web/20151025040111/http://blogs.msdn.com:80/b/sowmy/archive/2006/03/26/561188.aspx.
它是关于在 wcf 中序列化时保留数据契约(对象模型、对象图、域模型)中的循环引用。

class ReferencePreservingDataContractSerializerOperationBehavior
      :DataContractSerializerOperationBehavior
    {
        public ReferencePreservingDataContractSerializerOperationBehavior(
          OperationDescription operationDescription)
          : base(operationDescription) { }

        public override XmlObjectSerializer CreateSerializer(
          Type type, string name, string ns, IList<Type> knownTypes)
        {
            return CreateDataContractSerializer(type, name, ns, knownTypes);
        }
 
        private static XmlObjectSerializer CreateDataContractSerializer(
          Type type, string name, string ns, IList<Type> knownTypes)
        {
            return CreateDataContractSerializer(type, name, ns, knownTypes);
        }
 
        public override XmlObjectSerializer CreateSerializer(
          Type type, XmlDictionaryString name, XmlDictionaryString ns,
          IList<Type> knownTypes)
        {
            return new DataContractSerializer(type, name, ns, knownTypes,
                0x7FFF /*maxItemsInObjectGraph*/,
                false/*ignoreExtensionDataObject*/,
                true/*preserveObjectReferences*/,
                null/*dataContractSurrogate*/);
        }
    }

Isn't CreateDataContractSerializer生成无限循环(stackoverflow) - 因此也是前面的CreateSerializer method?

private static XmlObjectSerializer CreateDataContractSerializer(
          Type type, string name, string ns, IList<Type> knownTypes)
        {
            return CreateDataContractSerializer(type, name, ns, knownTypes);
        }

现在也许这些方法都没有被使用?我在这里缺少什么?


看起来确实如此。它有效的事实表明当前仅调用了最后一个重载。由于涉及不同的参数,也许最好放弃静态方法(这没有帮助):

public override XmlObjectSerializer CreateSerializer(
  Type type, string name, string ns, IList<Type> knownTypes)
{
    return new DataContractSerializer(type, name, ns, knownTypes,
        0x7FFF /*maxItemsInObjectGraph*/,
        false/*ignoreExtensionDataObject*/,
        true/*preserveObjectReferences*/,
        null/*dataContractSurrogate*/);
}

public override XmlObjectSerializer CreateSerializer(
  Type type, XmlDictionaryString name, XmlDictionaryString ns,
  IList<Type> knownTypes)
{
    return new DataContractSerializer(type, name, ns, knownTypes,
        0x7FFF /*maxItemsInObjectGraph*/,
        false/*ignoreExtensionDataObject*/,
        true/*preserveObjectReferences*/,
        null/*dataContractSurrogate*/);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列化代码示例中的无限循环 的相关文章

随机推荐

  • Angular2:从javascript函数调用组件方法[重复]

    这个问题在这里已经有答案了 目前我正在尝试实现引导日期选择器 它使用jQuery 以及我的 Angular2 项目 这是我到目前为止所拥有的 import Component AfterViewInit Injector Inject fr
  • .ContextMenu 和 .ContextMenuStrip 之间的差异

    两者有什么区别 ContextMenu and ContextMenuStrip在 Windows 窗体中 我已经知道什么是ContextMenu是 但是怎么样ContextMenuStrip不同于ContextMenu 您可能想知道为什么
  • 如何将三角形标记添加到 SpreadsheetGear 网格的任何单元格角?

    这是 SpreadsheetGear Grid 的特定问题 我知道您可以向单元格添加注释 单元格会自动在右上角获得红色三角形标记 但我需要在任何单元格角落添加一个小三角形 不同颜色 来指示一些特殊的东西 有可能做到吗 更新 这是我根据丹尼尔
  • Linux 中 `cd //` 中的双斜杠 // 是什么意思? [复制]

    这个问题在这里已经有答案了 我输入了一个命令cd 代替cd 错误地 而不是像我期望的那样收到错误 shell Bash 显示了一个提示 就像我在 目录
  • 如何在 Keras 中实现 L2-norm pooling?

    我想向我的 CNN 添加一个全局时间池层 它具有三种不同的池函数 均值 最大值和 L2 范数 Keras 有平均池化函数和最大池化函数 但我还没有找到用于 L2 的池化函数 我自己该如何实现呢 我也在寻找这个 keras 中没有这样的开箱即
  • Tensorflow 中的多个会话和图形(在同一进程中)

    我正在训练一个模型 其中输入向量是另一个模型的输出 这涉及从检查点文件恢复第一个模型 同时从头开始初始化第二个模型 使用tf initialize variables 在同一过程中 有大量的代码和抽象 所以我只是将相关部分粘贴到此处 以下是
  • 如何让 Metro(React Native 打包器)忽略某些目录

    Problem 我的项目有一个 providesModule naming collision当试图跑步时react native run ios从命令行 它与自动生成的目录冲突dist 它是由另一个 npm 包 esdoc 创建的 我希望
  • XPath 如何处理 XML 命名空间?

    XPath 如何处理 XML 命名空间 If I use IntuitResponse QueryResponse Bill Id 为了解析下面的 XML 文档 我返回了 0 个节点
  • glsl lowp 随机数生成(用于图形)的好算法是什么?

    我需要一个随机数生成器来创建一些图形静态 我不是在寻找噪声算法 我只是想要白噪声 我所需要的只是 glsl 中的随机数生成器 具体来说 随着时间的推移 我将使用它为每个片段创建随机亮度偏移 要求 生成 0 0 到 1 0 之间的数字 不关心
  • 使用 for 循环替换 pandas 列每行中的单元格值

    请帮助我理解我的错误 我正在尝试更改我的一列 csv文件 我有 csv文件如下 sku name code k1 aaa 886 k2 bbb 898 k3 ccc 342 k4 ddd 503 k5 eee 401 我想将 sku 列中的
  • TFS 无法识别添加的项目 VS2013 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用 VS2013 和 TFS Online 当我添加一个新项目时 源代码管理不会将其识别为添加的项目 但 csproj 会使用新文件
  • 检查定时器是否正在运行

    我一直在尝试用计时器重新填充游戏生活 但每当我离开视图并返回时 计时器就会重复并变得更快 我尝试用以下方法解决这个问题Timer isValid函数仅在无效时运行计时器 因此它永远不会重复 但它似乎无法检查计时器是否在invalid在 if
  • nginx 响应 404 Not Found(单页应用程序)

    我有一个带有常规浏览器路由器 没有哈希 的单页应用程序 每当有人浏览页面并点击刷新按钮时 nginx 都会尝试在此路径上查找文件 所以如果有人在mypage com aboutnginx 寻找about文件并以 404 Not Found
  • R 矩阵到 rownames colnames 值

    我有一个矩阵 A 我想将其转换为以下形式的 data frame rownames colnames values Using unlist A 有帮助 但没有给我行名 感谢您的帮助 您可以使用 reshape2 package load
  • Android - 用 @IntDef 替换参数化枚举

    如何避免参数化枚举与 IntDef 我想保留一些与每个枚举 类型关联的静态详细信息 例如关联的 URl 关联的可绘制对象等 TYPE ONE R string res Urls URL1 TYPE TWO R string res Urls
  • 如何防止Xcode每次都重建项目

    我有一个 Mac OS X 应用程序 由一个主要目标和一个依赖框架组成 自从在我的 Mac OS X 应用程序上启用代码签名后 我注意到每次运行 Xcode 时都会重建主要目标 即使我没有触及任何代码行 这是一个问题 因为依赖框架需要知道主
  • 如何更改多处理模块使用的序列化方法?

    如何更改Python使用的序列化方法multiprocessing图书馆 特别是 默认的序列化方法使用pickle具有该版本 Python 的默认 pickle 协议版本的库 默认的pickle协议在Python 2 7中是版本2 在Pyt
  • 为什么是24位寄存器?

    在我的工作中 我处理不同的微控制器 微处理器和 DSP 处理器 其中许多都有 24 位寄存器和计数器 我知道如何使用它们 这不是我的问题 我的问题是为什么他们有 24 位寄存器 为什么不把它做成32位的呢 据我所知 这不是大小的问题 因为寄
  • 根据另一个参考数组从一个数组中选择密切匹配

    我有一个数组A和一个参考数组B 尺寸为A至少和B e g A 2 100 300 793 1300 1500 1810 2400 B 4 305 789 1234 1890 B实际上是指定时间信号中峰值的位置 并且A包含稍后时间的峰值位置
  • 序列化代码示例中的无限循环

    看看下面的代码here https web archive org web 20151025040111 http blogs msdn com 80 b sowmy archive 2006 03 26 561188 aspx 它是关于在