jjzjj

C# 反序列化列表计数为零

coder 2024-07-05 原文

在正确反序列化我的类时遇到一些问题。

其他反序列化类工作正常并且在本质上看起来相似但是当反序列化器运行时,我得到 ErrorDetail 和 String 列表的 0 计数。

我错过了什么/做错了什么?

XML:

<PlaceOrderResponse
    xmlns="http://blah.co.uk">
    <PlaceOrderResult
        xmlns:a="http://blah.co.uk/WebserviceMessage"
        xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:ErrorDetails
            xmlns:b="http://blah.co.uk/Error">
            <b:ErrorDetail>
                <b:Code>1fasd</b:Code>
                <b:Message>Explain</b:Message>
            </b:ErrorDetail>
        </a:ErrorDetails>
        <a:ID i:nil="true"/>
        <a:InformationalMessages
            xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
            <a:Status>1</a:Status>
        </PlaceOrderResult>
    </PlaceOrderResponse>

C# 类:

[Serializable()]
    [XmlRoot(ElementName = "PlaceOrderResponse", Namespace = "http://blah.co.uk", IsNullable = false)]
    [XmlType(AnonymousType = true, Namespace = "http://blah.co.uk")]
    public class PlaceOrderResponse
    {
        [XmlElement(ElementName = "PlaceOrderResult")]
        public PlaceOrderResult placeOrderResult { get; set; }
    }

    [XmlRoot(ElementName = "PlaceOrderResult")]
    public class PlaceOrderResult : WebserviceMessage { }

[XmlRoot(Namespace = "http://blah.co.uk/WebserviceMessage")]
    [XmlType(AnonymousType = true)]
    public class WebserviceMessage
    {
        [XmlArray("ErrorDetails")]
        [XmlArrayItem("ErrorDetail", typeof(ErrorDetail))]
        public ErrorDetails errorDetails { get; set; }
        [XmlElement("ID")]
        public string ID { get; set; }
        [XmlArray("InformationMessages")]
        [XmlArrayItem(typeof(String))]
        public List<String> InformationMessages { get; set; }
        [XmlElement("Status")]
        public string Status { get; set; }
    }

[XmlRoot(ElementName = "ErrorDetails")]
    [XmlTypeAttribute(AnonymousType = true)]
    public class ErrorDetails : List<ErrorDetail> { }

    [XmlRoot(ElementName = "ErrorDetail", Namespace = "http://blah.co.uk/Error")]
    [XmlTypeAttribute(AnonymousType = true)]
    public class ErrorDetail
    {
        [XmlElement(ElementName = "Code")]
        public string Code { get; set; }
        [XmlElement(ElementName = "Message")]
        public string Message { get; set; }
    }

最佳答案

你的 XmlArrayItem将从其父级继承其命名空间。所以你需要明确地包括这个:

[XmlArrayItem("ErrorDetail", typeof(ErrorDetail), Namespace = "http://blah.co.uk/Error")].

关于信息性消息,没有要加载的字符串,因此很难判断 XML 应该 是什么样子。它将期望形式为 <string>message</string> 的元素

作为提示,调试这些问题的最简单方法是尝试相反的方法 - 创建一个对象并将其序列化为 XML。然后将其与您尝试反序列化的内容进行比较,您会发现很容易发现差异所在。

关于C# 反序列化列表计数为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34660922/

有关C# 反序列化列表计数为零的更多相关文章

  1. ruby - RVM 使用列表[0] - 2

    是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论

  2. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  3. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  4. ruby-on-rails - Ruby on Rails 计数器缓存错误 - 2

    尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot

  5. ruby - 使用多个数组创建计数 - 2

    我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']

  6. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  7. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  8. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  9. ruby-on-rails - carrierwave:在序列化动态属性上安装 uploader - 2

    首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟

  10. Ruby 计数数组对象,如果对象包含值 - 2

    我有一个数组:array=['Footballs','Baseball','football','Soccer']而且我需要计算看到Football或Baseball的次数,无论大小写和复数形式如何。这是我尝试做的,但没有成功:array.count{|x|x.downcase.include?'football'||x.downcase.include?'baseball'}编写这段代码的正确或更好的方法是什么?我正在寻找3作为答案。 最佳答案 我会将count与一个block结合使用,该block根据与您正在寻找的约束相匹配的正

随机推荐