将 JSON 反序列化为对象

     2023-04-12     44

关键词:

【中文标题】将 JSON 反序列化为对象【英文标题】:Deserializing JSON into an object 【发布时间】:2016-03-17 07:26:47 【问题描述】:

我有一些 JSON:


    "foo" : [ 
         "bar" : "baz" ,
         "bar" : "qux" 
    ]

我想将其反序列化为一个集合。我已经定义了这个类:

public class Foo

    public string bar  get; set; 

但是,下面的代码不起作用:

 JsonConvert.DeserializeObject<List<Foo>>(jsonString);

如何反序列化我的 JSON?

【问题讨论】:

这是“为什么这种反序列化不起作用”的规范问题,应该显示人们可以遵循的一般工作流程。随意回答、改进和用作重复目标。 【参考方案1】:

那个 JSON 不是 Foo JSON 数组。代码JsonConvert.DeserializeObject&lt;T&gt;(jsonString) 将解析JSON 字符串从根向上,您的类型T 必须与该JSON 结构完全匹配。解析器不会猜测 哪个 JSON 成员应该代表您正在寻找的 List&lt;Foo&gt;

您需要一个根对象,它表示来自根元素的 JSON。

您可以轻松地让执行此操作的类从示例 JSON 生成。为此,请复制您的 JSON 并在 Visual Studio 中单击 Edit -&gt; Paste Special -&gt; Paste JSON As Classes

或者,您可以在 http://json2csharp.com 上执行相同的操作,这会生成或多或少相同的类。

您会看到集合实际上比预期的要深一个元素:

public class Foo

    public string bar  get; set; 


public class RootObject

    public List<Foo> foo  get; set; 

现在您可以从根目录反序列化 JSON(并确保将 RootObject 重命名为有用的名称):

var rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString);

并访问集合:

foreach (var foo in rootObject.foo)

    // foo is a `Foo`


您始终可以重命名属性以遵循您的大小写约定并为它们应用JsonProperty 属性:

public class Foo

    [JsonProperty("bar")]
    public string Bar  get; set; 

还要确保 JSON 包含足够的示例数据。类解析器必须根据 JSON 中的内容猜测适当的 C# 类型。

【讨论】:

谢谢@CodeCaster。虽然我在 VS2010 和 VS2017 中都找不到粘贴特殊选项,但提供的链接完成了这项工作。哇。希望我早点知道这个网站。谢谢!

将 JSON 反序列化为对象

】将JSON反序列化为对象【英文标题】:DeserializingJSONintoanobject【发布时间】:2021-12-1621:52:42【问题描述】:我有一些JSON:"foo":["bar":"baz","bar":"qux"]我想将其反序列化为一个集合。我已经定义了这个类:publicclassFoopublicstringbarget;set;... 查看详情

使用 Json.net 将 JSON 对象反序列化为动态对象

】使用Json.net将JSON对象反序列化为动态对象【英文标题】:DeserializeJSONobjectintodynamicobjectusingJson.net【发布时间】:2011-05-3023:13:12【问题描述】:是否可以使用json.net从json反序列化返回动态对象?我想做这样的事情:dynamicjsonRespons... 查看详情

将 JSON 反序列化为现有对象 (Java)

】将JSON反序列化为现有对象(Java)【英文标题】:DeserializeJSONintoexistingobject(Java)【发布时间】:2012-09-1304:09:20【问题描述】:我想知道如何让JacksonJSON库将JSON反序列化为现有对象?我试图找到如何做到这一点;但它似乎只能接受... 查看详情

将 JSON 命名属性反序列化为 .Net 对象

】将JSON命名属性反序列化为.Net对象【英文标题】:DeserializeJSONnamedpropertyto.NetObject【发布时间】:2012-03-0109:56:21【问题描述】:我使用的API提供了JSON负载。响应的一部分有一个包含命名对象数组的属性。我想我想将这部分反序... 查看详情

将 PHP 对象图序列化/反序列化为 JSON

】将PHP对象图序列化/反序列化为JSON【英文标题】:Serialize/unserializePHPobject-graphtoJSON【发布时间】:2012-05-1610:06:15【问题描述】:我想将完整的PHP对象图序列化为JSON字符串表示,然后将其反序列化回相同的PHP对象图。以下是我考... 查看详情

将 JSON 字符串反序列化为多个 C# 对象

】将JSON字符串反序列化为多个C#对象【英文标题】:DeserializeJSONstringintomultipleC#objects【发布时间】:2019-05-3022:47:28【问题描述】:我有一个以下格式的JSON字符串,我想将其反序列化为C#列表。但是JSON中的记录号“1”、“2”、“... 查看详情

将 JSON 反序列化为 JavaScript 对象

】将JSON反序列化为JavaScript对象【英文标题】:DeserializingaJSONintoaJavaScriptobject【发布时间】:2011-09-2303:36:00【问题描述】:我在使用AJAX访问的Java服务器应用程序中有一个字符串。它看起来像下面这样:varjson=["adjacencies":["nodeTo":"g... 查看详情

将 Objective-C 对象序列化和反序列化为 JSON

】将Objective-C对象序列化和反序列化为JSON【英文标题】:SerializeandDeserializeObjective-CobjectsintoJSON【发布时间】:2011-08-2407:37:27【问题描述】:我需要将objective-c对象序列化和反序列化为JSON以存储在CouchDB中。人们是否有任何示例代... 查看详情

将特定 JSON 字段反序列化为 Unity 中的对象列表

】将特定JSON字段反序列化为Unity中的对象列表【英文标题】:DeserializingspecificJSONfieldsintoalistofobjectsinUnity【发布时间】:2021-09-0907:03:07【问题描述】:对于个人项目,我正在尝试将大型Json数组反序列化为对象列表,但是在遵循其... 查看详情

如何将对象的json数组反序列化为字典[重复]

】如何将对象的json数组反序列化为字典[重复]【英文标题】:Howtodeserializethejsonarrayofobjectstodictionary[duplicate]【发布时间】:2012-01-2123:42:23【问题描述】:我有一个Json字符串"[\'SymptID\':\'"+MidID+"\',\'ALvl\':\'"+JawLvl+"\',\'SymptID\':\'"+BckID+... 查看详情

将json字符串反序列化为python中的对象

】将json字符串反序列化为python中的对象【英文标题】:Deserializeajsonstringtoanobjectinpython【发布时间】:2013-03-0619:10:21【问题描述】:我有以下字符串"action":"print","method":"onData","data":"MadanMohan"我想反序列化为类的对象classpayloadstringa... 查看详情

无法将 JSON 数组反序列化为 C# 对象 [关闭]

】无法将JSON数组反序列化为C#对象[关闭]【英文标题】:UnableDeserializeJSONArraytoC#object[closed]【发布时间】:2021-09-2812:24:24【问题描述】:我有一个HTML页面和一些进行AJAX调用的Javascript代码。在我的API(C#)的服务器端,我收到一个JSON... 查看详情

javascriptserializer类对象序列化为json,json反序列化为对象

JavaScriptSerializer类由异步通信层内部使用,用于序列化和反序列化在浏览器和Web服务器之间传递的数据。说白了就是能够直接将一个C#对象传送到前台页面成为javascript对象。要添加System.Web.Extensions.dll的引用。该类位于System.Web.Scri... 查看详情

无法将 JSON 字符串反序列化为 C# 对象

】无法将JSON字符串反序列化为C#对象【英文标题】:UnabletodeseralizeJSONStringtoaC#Object【发布时间】:2021-04-2710:11:03【问题描述】:我正在尝试将从https://my-json-server.typicode.com/dskato/UDLAProyectoApi/posts检索到的JSON字符串转换为我的“客... 查看详情

Json.NET:将嵌套数组反序列化为强类型对象

】Json.NET:将嵌套数组反序列化为强类型对象【英文标题】:Json.NET:deserializenestedarraysintostronglytypedobject【发布时间】:2012-10-1514:13:22【问题描述】:我正在编写客户端应用程序,它应该处理服务器响应。响应采用JSON格式。我决... 查看详情

如何将java对象序列化/反序列化为javax.json

从Java7开始,就有了JSON标准。是否有一个简单或标准的解决方案,用于将Java对象序列化为JSON并再次返回?答案你可以试试Gson。它非常简单易用。另一答案您可以使用jaxb注释。 查看详情

将嵌套的 JSON 反序列化为 C# 对象

】将嵌套的JSON反序列化为C#对象【英文标题】:DeserializenestedJSONintoC#objects【发布时间】:2016-12-1202:24:38【问题描述】:我从如下所示的API获取JSON:"Items":"Item322A":["prop1":"string","prop2":"string","prop3":1,"prop4":false,"prop1":"string","prop2":"st... 查看详情

将 JSON 对象反序列化为 .NET HashSet 和列表失败

】将JSON对象反序列化为.NETHashSet和列表失败【英文标题】:DeserializeJSONobjectas.NETHashSetandListsFailed【发布时间】:2021-07-1422:56:14【问题描述】:我有这种想要保存的Json:"data":"importMannerTypeList":"importMannerTypeID":5,"importMannerTypeDesc":"a",... 查看详情