Protobuf-net :嵌套 IEnumerable 对象

2023-11-23

我正在使用 Protobuf-net 序列化自定义嵌套列表。我知道原生列表不能直接嵌套,这就是为什么我使用容器对象作为内部列表。但是,我也想让我的容器对象 IEnumerable 但这意味着 Protobuf-net 会抛出错误:

不支持嵌套或锯齿状列表和数组

这是导致错误的列表结构的示例:

[ProtoContract]
public class MyOuterList<T>
{
    [ProtoMember(1)]
    readonly List<MyInnerList<T>> nestedData = new List<ObjectList<T>>();
}

[ProtoContract]
public class MyInnerList<T> : IEnumerable<T>
{
    [ProtoMember(1)]
    private readonly List<T> data = new List<T>();
}

修复方法是从中删除 IEnumerableMyInnerList但显然这阻止了它直接可迭代。有没有类似的偷偷摸摸的属性[ProtobufCustomObjectSoPleaseIgnoreIEnumerable]可以用吗?

到目前为止,我想出的最好的替代方案是使用 Enumerable 属性,如下所示,但我担心该属性仍然可以再次转换回列表。我更愿意使用GetEnumerator/yield以某种方式,但我不明白如何。

[ProtoContract]
public class MyInnerList<T>
{
    [ProtoMember(1)]
    private readonly List<T> data = new List<T>();

    public IEnumerable<T> Data
    {
        get { return this.data; }
    }
}

有没有类似的偷偷摸摸的属性[ProtobufCustomObjectSoPleaseIgnoreIEnumerable]可以用吗?

yup:

[ProtoContract(IgnoreListHandling=true)]
public class MyInnerList<T> : IEnumerable<T>
{
    [ProtoMember(1)]
    private readonly List<T> data = new List<T>();
}

偷偷摸摸就是偷偷摸摸。IgnoreListHandling有智能感知文档:

如果指定,请勿将此类型视为列表,即使它看起来像一个列表。

另外,由于多次请求像这个,我计划尽快考虑实现对锯齿状数组/列表的支持。该计划基本上是让运行时在序列化程序的想象中使用成员(字段 1)来欺骗包装器,因此您可以使用List<List<T>>它的工作原理就像上面的模型一样(它甚至是有线兼容的,因为你明智地选择了现场1).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Protobuf-net :嵌套 IEnumerable 对象 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org

随机推荐

  • 如何在 .NET 中的大文件中间插入或删除字节

    是否有可能有效率的从大文件的中间插入或删除字节 如果是这样怎么办 或者我是否在插入或删除数据后重写整个文件 A lot of Bytes Unwanted Bytes A lot of Bytes gt A lot of Bytes A l
  • ul 列表不会在按键时滚动,但可以使用鼠标滚轮滚动

    我正在使用 Bootstrap 3 并且有一个 autossugest 输入 问题是我想要 ul 使用键盘按键滚动但不起作用 我认为使用箭头键滚动是默认行为 但 ul 不这样做 这是正在发生的事情 如果我按向下键两次 我正在使用预先输入由巴
  • 使用 json 将图像上传到 djangorestframework 的 imagefield 并使用 CURL 进行测试

    我在djangorest框架中制作了几个api 我可以使用 api 的 html 形式进行测试 就像在命令行中使用curl 一样 现在我有一个模型的 api 其中一个字段是 ImageField 我不知道该使用哪个curl 命令 使用我在
  • 编译为 1.5 编写的 Java 代码以与 1.4 JRE 一起使用?

    我有一个使用泛型和一些 Java 1 5 6 的项目 是否可以编译此代码以在运行 1 4 JRE 的系统上运行 我使用 ANT 构建脚本和 javac 任务来编译该库 当目标属性为 1 5 时 此构建效果良好 如果我将目标更改为 1 4 则
  • 如何在不执行 Spark SQL 表达式的情况下验证它?

    我想验证 Spark sql 查询在语法上是否正确 而无需在集群上实际运行查询 实际用例是我正在尝试开发一个用户界面 它接受用户输入 Spark sql 查询 并且我应该能够验证提供的查询在语法上是否正确 另外 如果在解析查询之后 我可以就
  • 使用默认内容块生成 content_for

    我们的 Rails 项目大量使用content for 然而 如果没有使用定义任何内容 我们经常需要渲染默认内容content for 为了可读性和可维护性 将此默认内容放在一个块中是有意义的 我们在 Rails 2 3 中创建了一个辅助方
  • JavaScript 使用逻辑运算符切换?

    for var count 1 count lt 6 count switch count case 2 document write hi break case count gt 3 document write bye break ca
  • 如何在正在编写的另一个 jQuery 插件中包含外部插件

    我正在为我正在进行的项目构建一个自定义 jQuery 插件 我想返回一个自定义到另一个 jQuery 插件的对象 而不是必须确保使用我的插件的每个页面也有这个其他插件 是否可以将其包含在实际的插件本身中 而不是在使用我的插件的每个页面上键入
  • 自动检测移动浏览器(通过用户代理?)[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何检测用户是否正在通过移动网络浏览器查看我的网站 以便我可以自动检测并显示我的网站的适当版本 上面有开源脚本检测移动浏览器在 Apache ASP ColdFusion Jav
  • Python:排除模块 Pyinstaller

    我开始使用 Pyinstaller 而不是 Py2Exe 然而我很快就遇到了问题 如何排除不需要的模块 以及如何查看包含在单个可执行文件中的模块 我可以删除一些pyd and dll我的 Python 安装中的 DLL 文件夹中的文件 因此
  • 使用 Fluent 验证的 Model T 通用验证器?

    我昨天刚刚了解 Fluent Validation 我认为它非常酷 我已经尝试过并且有效 但我的应用程序目前有多个模型 我必须承认为每个模型编写验证器的压力很大 是否有可能用泛型编写它并找到一种方法来验证每个模型 这就是我的验证器目前的编写
  • 向量的数据如何对齐?

    如果我想处理数据std vector对于 SSE 我需要 16 字节对齐 我怎样才能做到这一点 我需要编写自己的分配器吗 或者默认分配器是否已与 16 字节边界对齐 C 标准需要分配函数 malloc and operator new 为任
  • vbscript 中的 CommonAppData

    客户的应用程序 AppName 的配置文件存储在 CommonAppData 中 在 Windows XP 下是C Documents and Settings All Users Application Data AppName 在 Wi
  • Spring Boot 执行器健康指示器

    我们现在已经在几个项目中使用Spring Boot 我们使用的是最新版本1 2 3 我们正在合并执行器 到目前为止 一切运行良好 除了我们发现 health 指示器 默认 显示服务已关闭 这不是真的 这些服务是通过数据源实现的 它可能会调用
  • 从数组到列表的隐式转换

    如何编写隐式转换Array to List 类型 我尝试了以下方法 但似乎不起作用 scala gt implicit def arrayToList A ClassManifest a Array A List A a toList
  • 对于在浏览器中测试 extjs 代码(最好使用 selenium)有什么建议吗?

    我们一直在使用 selenium 来处理高级网站测试 除了模块级别的大量 python 文档测试之外 并取得了巨大成功 然而 现在我们在很多页面上使用 extjs 并且事实证明很难将 Selenium 测试纳入网格等复杂组件 有人成功为基于
  • 如何在Windows下的cmd窗口中显示日文汉字?

    我有一个英语 Windows 2003 服务器 激活了亚洲语言支持 命令窗口 cmd 设置 仅有的两种可用字体是 raster 和 lucida console 两者都无法正确显示汉字 显示为问号 有没有办法让它们显示出来 在写入控制台之前
  • 在 Delphi 中修改 Rest 服务器上的 URL

    我已经在 Delphi XE 中编写了一个 REST 服务器 使用向导 并且我想稍微更改一下 URL 这样就不用http 192 168 1 84 8080 datasnap rest TServerMethods1 GetListings
  • iOS 8.3 自定义键盘中的“UIView-Encapsulated-Layout-Width”

    我已经实现了自定义键盘 它在运行 iOS 8 2 的设备上运行良好 但是 当我在 iOS 8 3 的设备上运行相同的代码时 我收到以下警告 并且键盘的高度设置不正确 Probably at least one of the constrai
  • Protobuf-net :嵌套 IEnumerable 对象

    我正在使用 Protobuf net 序列化自定义嵌套列表 我知道原生列表不能直接嵌套 这就是为什么我使用容器对象作为内部列表 但是 我也想让我的容器对象 IEnumerable 但这意味着 Protobuf net 会抛出错误 不支持嵌套