使用 Json.NET 反序列化空数组

2024-04-18

我有一个使用 Json.NET v7.0.1 的 C# 应用程序。作为 REST 调用的结果,我以以下形式返回一些 JSON:

{
"messages": [ {"phoneNumber":"123-456-7890", "smsText":"abcd1234="},
              {"phoneNumber":"234-567-8901", "smsText":"efgh5678="},
              {"phoneNumber":"345-678-9012", "smsText":"12345asdf"} ]
}

如果没有要返回的消息数据,我返回的 JSON 如下所示:

{
"messages": [ ]
}

我的消息类如下所示:

public class Message
{
    public string PhoneNumber { get; set; }
    public string SmsText { get; set; }

    public Message()
    {
    }

    public Message(string phoneNumber, string smsText)
    {
        PhoneNumber = phoneNumber;
        SmsText = smsText;
    }
}

当我尝试反序列化 JSON 时,我使用以下代码:

Message[] messages = JsonConvert.DeserializeObject<Message[]>(json, new JsonSerializerSettings
{
    MissingMemberHandling = MissingMemberHandling.Ignore
});

我遇到的问题是当消息数组为空时反序列化 JSON。发生这种情况时,我会得到以下异常:

无法反序列化当前 JSON 对象(例如 {\"name\":\"value\"}) 进入类型“WindowsFormTestApplication.Message[]”,因为类型 需要 JSON 数组(例如 [1,2,3])才能正确反序列化。\r\nTo 修复此错误,或者将 JSON 更改为 JSON 数组(例如 [1,2,3]) 或者更改反序列化类型,使其成为普通的 .NET 类型(例如 不是像整数这样的原始类型,也不是像数组这样的集合类型 或列表),可以从 JSON 对象反序列化。 还可以将 JsonObjectAttribute 添加到类型中以强制其 从 JSON 对象反序列化。 路径“messages”,第 2 行,位置 15。

当 JSON 数组为空时,我希望 Message[] 变量为 null。我是否需要一个自定义转换器来反序列化,或者我是否遗漏了一些明显的东西?谢谢!


您应该只发送一个数组

[ {"phoneNumber":"123-456-7890", "smsText":"abcd1234="},
              {"phoneNumber":"234-567-8901", "smsText":"efgh5678="},
              {"phoneNumber":"345-678-9012", "smsText":"12345asdf"} ]

或者使用像这样的包装对象

public WrapperObject 
{ 
    public Message[] messages { get; set; } 
}

然后使用它反序列化

var wrapper = JsonConvert.DeserializeObject<WrapperObject>(json, new JsonSerializerSettings
    {
        MissingMemberHandling = MissingMemberHandling.Ignore
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Json.NET 反序列化空数组 的相关文章

随机推荐

  • 与 NaN 进行元素比较作为相等

    如果我运行以下代码 dft1 pd DataFrame a 1 np nan np nan dft2 pd DataFrame a 1 1 np nan dft1 a dft2 a 结果是 0 True 1 False 2 False Na
  • Android 上的位置感知地理编码(就像 Google 地图)

    似乎在搜索谷歌地图 app is 位置感知 例如 如果我在悉尼搜索 Pitt St 它会立即找到正确的街道 单击 您的意思是 会显示其他 Pitt St 的列表附近郊区 有没有办法在我们的应用程序中获得类似的体验 我尝试了标准Geocode
  • 将 float 发送到不兼容类型 id 的参数

    我正在创建一个按钮 该按钮使用核心数据来保存点注释的名称 x 坐标和 y 坐标 我可以成功保留该名称 但当我尝试保存坐标时 我不断收到此错误 我已经记录了正确的数据 但我似乎无法保存它 当我尝试为 newPOI 设置值时 收到一条错误消息
  • AWS Cognito - 管理员无需发送电子邮件即可重置用户密码

    我需要重置一些用户的密码 但是not发送忘记密码的电子邮件 只需重置密码 以便他们下次登录时我可以显示一条消息 要求他们请求重置密码 深入研究我需要的最基本的东西 在不通知用户的情况下 我需要让他们进入一个RESET REQUIRED状态
  • C++ std::pair 的 C# 模拟是什么?

    我感兴趣的是 C 的类似物是什么std pair在 C 中 我发现System Web UI Pair类 但我更喜欢基于模板的东西 谢谢你 Tuples 自 NET4 0起可用 http msdn microsoft com en us l
  • 具有纬度/经度值的 Android GeoPoint

    我正在尝试获取 23 4456 by 45 44334 的 GeoPoint 我应该将什么值传递到 GeoPoint 的构造函数中 因为它只接受整数 GeoPoint 坐标以微度为单位 度 1e6 书面形式here http develop
  • 尝试让 div 在鼠标移动时“跟随”光标,但有延迟

    我想创建类似于旧鼠标轨迹的效果 其中 div 被延迟但跟随光标 通过使用设置间隔来触发光标坐标的动画 我已经相当接近了 body mousemove function e if enableHandler handleMouseMove e
  • 使用来自 WebSocket @ServerEndpoint 的 CDI @SessionScoped bean

    在 Web 应用程序中 用户使用 servlet HTTP 会话 一些数据存储在 CDI SessionScoped beans 中 稍后在某些页面中 WebSocket 通信是在用户浏览器和服务器之间执行的 对于 GlassFish 4
  • 如何从云函数内部运行查询?

    我想在调用 Firebase 应用程序上的云函数后对数据库执行查询 假设我在数据库上有某个触发器 请考虑中提供的示例Firebase 入门指南 https firebase google com docs functions write f
  • Ruby:在类方法中使用模块方法

    我们如何在类方法中使用模块方法而不扩展模块 module TestModule def module method module end end class TestClass include TestModule def self tes
  • gdb 输入文件中的十六进制值

    我正在尝试通过使用 gdb 内的 run 我可以成功地溢出程序 但在将十六进制值附加到字符串时遇到问题 我尝试过引用 将 mem addr 的值转换为 ascii 以及各种转义尝试 但没有成功 输入文件示例 AAAA x42 在上面的示例中
  • 监控 REST API 的最佳方式是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我创建了一个基于 RESTful 模式的 API 我想知道监视它的最佳方法是什么 我可以以某种方式收集每个请求的统计信息以及我可以监控
  • jsfiddle问题[重复]

    这个问题在这里已经有答案了 我无法让这个极其简单的 jsfiddle 工作 它只是应该在单击按钮时提醒测试 我在这里缺少什么 http jsfiddle net u9nG6 2 http jsfiddle net u9nG6 2 您必须将加
  • CSS 滤色器叠加

    我正在尝试在图像上创建颜色叠加层 就像在这个应用程序中一样 图像上的绿色叠加层 https i stack imgur com FdgdA png https i stack imgur com FdgdA png 对我来说 他们看起来并不
  • Word 2007 VBA:ActiveDocument.CustomXMLParts

    In 本教程 https learn microsoft com en us archive blogs erikaehrli data driven document generation with word 2007 and the o
  • 从 ViewPager 中删除由 FragmentStatePagerAdapter 填充的所有片段

    我有一个 ViewPager 我使用 FragmentStatePagerAdapter 填充片段 代表 arrayListOfObjects 中的对象 一切正常 mMyFragmentPagerAdapter new fragmentAd
  • 更少的 css 编译器。无法使用变暗属性

    我正在开发一个项目 使用 LESS 作为我的 CSS 编译器 我已经有一个完全工作的循环 可以正确设置背景颜色 我的问题是这样的 使用我当前的代码 当我尝试使用 darken 属性时 编译结果是这样的 SyntaxError 错误评估函数d
  • 我应该使用哪个功能接口?

    我正在学习编写一些 lambda 表示形式功能接口 https docs oracle com en java javase 11 docs api java base java lang FunctionalInterface html
  • UIView 的 viewDidLoad 吗?

    是什么viewDidLoad for UIView 我有一个UIView与 xib 一起 我想在加载时隐藏它的子视图之一 我尝试使用这个 id initWithCoder NSCoder aDecoder theView hidden YE
  • 使用 Json.NET 反序列化空数组

    我有一个使用 Json NET v7 0 1 的 C 应用程序 作为 REST 调用的结果 我以以下形式返回一些 JSON messages phoneNumber 123 456 7890 smsText abcd1234 phoneNu