【问题标题】:Deserialize 2.6k lines XML in Dotnet 5在 Dotnet 5 中反序列化 2.6k 行 XML
【发布时间】:2021-08-01 23:04:19
【问题描述】:

在 dotnet core (.net 5) 中反序列化的 xml 字符串的大小是否有限制?

一切正常。但是当我开始获得 2500 多行 xml 字符串时,我得到了 '对于无符号字节而言,值要么太大要么太小'。

疑难解答:

  • 测试了相同 xml 数据的旧版本(有 2000 多行,但少于新版本)。所以是数据相关的。

  • 使用 Visual Studio 的 Paste as XML 测试以从 xml 生成类。新旧类完全相同。所以结构/模式是 不变。

  • 在几个 xml 验证工具中测试了新的 xml,都报告它没有错误。所以不是数据错误。

从上面看来我达到了一些限制。

我尝试过的事情:

using System.Xml.Serialization;
using System.Text;

var stringReader = new StringReader(xmlStr);
var serializer = new XmlSerializer(typeof(MyClass));
var obj1 = serializer.Deserialize(stringReader) as MyClass;



var bytes = Encoding.UTF8.GetBytes(xmlStr);
MemoryStream memStream = new(bytes);
var obj2 = serializers.Deserialize(memStream) as MyClass;

我尝试定位不同的net5.0-windows7.0net5.0-windows10.0.20348.0net5.0-10.0.19041.0

有什么想法吗? (对不起,如果我的问题很原始,我正在学习)。

【问题讨论】:

  • 值对于无符号字节来说太大或太小 - 这是一个 数据 问题,在某处你的值小于 0 或大于 255,您尝试分配给 byte
  • @stuartd,我有像``这样的属性,你指的是什么?
  • 您是否尝试将该值存储为byte
  • 嗯。我刚刚查看了 Visual Studio 粘贴的内容.. 一些字段设置为 ushort,其他字段设置为 byte.. /// [XmlAttribute] public ushort id { get => idField;设置 => idField = 值; } ` /// [XmlAttribute] public byte id { get => idField;设置 => idField = 值; }`
  • 好的,我明白了。如果我将所有字节更改为 ushort,一切正常。感谢您提供线索!stuartd!

标签: c# .net-core .net-5


【解决方案1】:

问题是我在 Visual Studio 中使用了 Past XML as Class 剪贴板命令。它似乎已将byte 分配给来自xml string 的一些整数值,并分配了一些ushort。 我在 Visual Studio 生成的类中将所有 byte 替换为 ushort,然后一切正常!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2012-03-04
    • 2011-03-03
    相关资源
    最近更新 更多