反序列化后无法获取从xml文件返回的项目列表

Posted

技术标签:

【中文标题】反序列化后无法获取从xml文件返回的项目列表【英文标题】:Can't get the list of items returned from xml file after deserialization 【发布时间】:2021-06-06 23:07:26 【问题描述】:
    列表项

我从 xml 文件中转换并剥离了所有命名空间并转换为 Json 对象,下面是我在 jobject 中的文件这是我为获取返回的 Env 对象所做的,但它返回 null。

您能帮忙指出我的模型中缺少什么吗?我一直在做不同的路线但没有成功:(

 var jsonObject =
    JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeXNode(XDocument.Parse(responseRet)));
                var Env= Newtonsoft.Json.JsonConvert.DeserializeObject<Envelope>(jsonObject.ToString());

     ```


  

    这是我的课:

    公共类 SearchRecords_V2 公共列表 SearchTXRecord_V2 get;放;

    公共类 SearchTXRecord_V2 [数据成员] 公共 int SearchTXRecordID 获取;放; [数据成员] 公共字符串名字 获取;放; [数据成员] 公共字符串 MiddleName 获取;放; [数据成员] 公共字符串姓氏得到;放; [数据成员] 公共字符串后缀 获取;放; [数据成员] 公共字符串 SSN 获取;放; [数据成员] 公共字符串地址 获取;放; [数据成员] 公共字符串城市获取;放; [数据成员] 公共字符串状态获取;放; [数据成员] 公共字符串 PostalCode 获取;放; [数据成员] 公共字符串 ComponentID 获取;放; [数据成员] 公共字符串状态获取;放; [数据成员] 公共字符串创建获取;放;

【问题讨论】:

您好,欢迎来到 SO!以上json 无效。我要做的是创建代表这个jsonc# 类,然后您可以轻松地反序列化它并执行您想要的任何搜索。有许多 json 到 c# 在线生成器可以帮助您创建这些类,这里有一些:JSON2CSharp 和 QuickType。你能告诉我们json是如何序列化的,你是这样得到它的,还是你正在创造它? 【参考方案1】:

通过使用Newtonsoft.json 库,您可以将其解析为点网模型

型号:

namespace ConvertFromJson

    public partial class DemoJsonObj
    
        public Employees Employees  get; set; 
    

    public partial class Employees
    
        public List<Employee> Employee  get; set; 
    

    public partial class Employee
    
        public long Id  get; set; 
        public string FirstName  get; set; 
        public string LastName  get; set; 
        public Uri Photo  get; set; 
        public string SearchType  get; set; 
        public SearchRecords SearchRecords  get; set; 
    

    public partial class SearchRecords
    
        public List<SearchTestRecord> SearchTestRecord  get; set; 
    

    public partial class SearchTestRecord
    
        public long Field1  get; set; 
        public string Field2  get; set; 
        public RecordType RecordType  get; set; 
    

    public partial class RecordType
    
        public NativeRecordNumber NativeRecordNumber  get; set; 
    

    public partial class NativeRecordNumber
    
        public Uri Xmlns  get; set; 
        public string Text  get; set; 
    

在您的代码中

var json = ""employees":"employee":["id":"1","firstName":"Tom","lastName":"Cruise","photo":"https://jsonformatter.org/img/tom-cruise.jpg","SearchType":"type1","id":"2","firstName":"Maria","lastName":"Sharapova","photo":"https://jsonformatter.org/img/Maria-Sharapova.jpg","SearchType":"type1","SearchRecords":"SearchTestRecord":["field1":"128181","field2":"TESTCASE","RecordType":"NativeRecordNumber":"@xmlns":"http://schemas.link.com/searchType/1.0.0/","#text":"MPXXXX2011"],"id":"3","firstName":"Robert","lastName":"Downey Jr.","photo":"https://jsonformatter.org/img/Robert-Downey-Jr.jpg","SearchType":"type2"]"
DemoJsonObj obj = Newtonsoft.Json.JsonConvert.DeserializeObject<DemoJsonObj>(json);

【讨论】:

谢谢你,我已经按照你的指示在这里了。但是, List 返回 0 它应该返回它下面的记录。知道缺少什么吗? 如果答案有效,您应该标记为已接受。这些事情应该得到照顾。 1. 可空类型应该是 ?例:公长?字段 1。 2. JSON 属性名要与模型对象的属性名完全匹配。 没有。 SearchTestRecord 列表不断返回 0,我觉得这很奇怪,不确定缺少什么。由于传入的文件是 Xml,因此不应出现可为空的字段。关于如何捕获或填充列表的任何想法?感谢您提前提供任何帮助。 请发布您收到的 JSON,您将其解析为点网模型。 我不知道在哪里发布代码,所以我编辑了问题并在 XML 中重新发布为传入的文件和我创建的支持它的对象。正如我所解释的,我目前遇到的问题是 SearchTestRecord 列表根据 xml 文件返回 0 而不是 1。不知道我还错过了什么来正确映射/填充这些东西。 :-(

以上是关于反序列化后无法获取从xml文件返回的项目列表的主要内容,如果未能解决你的问题,请参考以下文章

无法反序列化 JSON 响应

反序列化从 SQL 查询返回的 XML 对象?

如何将 xml 对象反序列化回类列表

无法使用 Jackson XML 直接在根元素内反序列化列表

无法反序列化 xml 数组以列出 web api 模型 c#

保存对象列表返回无法反序列化错误