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

     2023-03-31     267

关键词:

【中文标题】将 JSON 命名属性反序列化为 .Net 对象【英文标题】:Deserialize JSON named property to .Net Object 【发布时间】:2012-03-01 09:56:21 【问题描述】:

我使用的 API 提供了 JSON 负载。响应的一部分有一个包含命名对象数组的属性。我想我想将这部分反序列化为一个 .Net 列表,问题是数组中的每个对象都带有一个名称,所以我无法将它作为一个列表。

这是有效载荷:


  "ShipAction": "GetQuote",
  "Status": "Success",
  "RequestDate": "2012-02-08 21:18:19",
  "Username": "tpi",
  "QuoteID": "6M15AQOrCl059x",
  "QuoteExpires": "2012-02-22 21:18:20",
  "NoServices": 8,
  "DeliveryCountry": "France",
  "CheapestQuote": 
    "SubTotal": "15.96",
    "VatTotal": "3.19",
    "TotalPrice": "19.15"
  ,
  "ServiceOptions": 
    "PF_INT": 
      "OptionID": "6183545",
      "Carrier": "PF_INT",
      "ServiceName": "Euro Priority",
      "AlternateName": false,
      "ServiceID": "PF_INT",
      "SubjectToVat": "Y",
      "SubTotal": "15.96",
      "VatTotal": "3.19",
      "TotalPrice": "19.15"
    ,
    "FEDEX_ECON": 
      "OptionID": "6183549",
      "Carrier": "FEDEX",
      "ServiceName": "Economy Delivery",
      "AlternateName": false,
      "ServiceID": "FEDEX_ECON",
      "SubjectToVat": "Y",
      "SubTotal": "18.56",
      "VatTotal": "3.71",
      "TotalPrice": "22.27"
    ,
    "FEDEX_PRI": 
      "OptionID": "6183548",
      "Carrier": "FEDEX",
      "ServiceName": "International Express",
      "AlternateName": false,
      "ServiceID": "FEDEX_PRI",
      "SubjectToVat": "Y",
      "SubTotal": "20.07",
      "VatTotal": "4.01",
      "TotalPrice": "24.08"
    ,
    "TNT_EXPRESS": 
      "OptionID": "6183550",
      "Carrier": "TNT Export",
      "ServiceName": "TNT International Express",
      "AlternateName": false,
      "ServiceID": "TNT_EXPRESS",
      "SubjectToVat": "Y",
      "SubTotal": "20.73",
      "VatTotal": "4.15",
      "TotalPrice": "24.88"
    ,
    "DHL_EURO": 
      "OptionID": "6183546",
      "Carrier": "DHL",
      "ServiceName": "DHL Euro Plus",
      "AlternateName": false,
      "ServiceID": "DHL_EURO",
      "SubjectToVat": "Y",
      "SubTotal": "23.10",
      "VatTotal": "4.62",
      "TotalPrice": "27.72"
    ,
    "TNT_ECONOMY": 
      "OptionID": "6183551",
      "Carrier": "TNT Export",
      "ServiceName": "TNT International Economy Express",
      "AlternateName": false,
      "ServiceID": "TNT_ECONOMY",
      "SubjectToVat": "Y",
      "SubTotal": "24.14",
      "VatTotal": "4.83",
      "TotalPrice": "28.97"
    ,
    "DHL_INT": 
      "OptionID": "6183547",
      "Carrier": "DHL TD",
      "ServiceName": "Time Definite",
      "AlternateName": false,
      "ServiceID": "DHL_INT",
      "SubjectToVat": "Y",
      "SubTotal": "30.79",
      "VatTotal": "6.16",
      "TotalPrice": "36.95"
    ,
    "PALLETWAYS_EURO_QUAR": 
      "OptionID": "6183552",
      "Carrier": "PALLETWAYS_EURO",
      "ServiceName": "Quarter Pallet Delivery",
      "AlternateName": false,
      "ServiceID": "PALLETWAYS_EURO_QUAR",
      "SubjectToVat": "Y",
      "SubTotal": "152.67",
      "VatTotal": "30.53",
      "TotalPrice": "183.20"
    
  

我想要一个“ServiceOptions”列表。我很乐意使用 Json.Net 来执行此操作,但我又被难住了。。

【问题讨论】:

@Etienne de martel,你是如何格式化 JSON 的,我很努力但失败了? 像任何代码一样:只需将每行缩进 4 个空格(或者,更好的是,选择整个代码并按“代码”按钮)。如需更多信息,请阅读Editing Help。 【参考方案1】:

您所说的这种“命名对象数组”是一种众所周知的数据结构,称为dictionaryma​​p。 (对于 .NET,请参阅 this doc。)

只需将Dictionary<string, YourServiceOptionObject> 用于ServiceOptions 属性。

旁注:事实上,您可能提到的属性ServiceOptions 的结构与CheapestQuote 属性没有任何不同,除了每个而不是原始的value 拥有另一个嵌套字典/对象的值。

【讨论】:

看不到树上的木头。谢谢!

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

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

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

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

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

...m.Web.Extensions.dll的引用。该类位于System.Web.Script.Serialization命名空间下。一、属性MaxJsonLength获取或设置JavaSc 查看详情

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

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

如何将具有嵌套属性的 JSON 对象反序列化为 Symfony 实体?

】如何将具有嵌套属性的JSON对象反序列化为Symfony实体?【英文标题】:HowdoIdeserializeaJSONobject-whichhasanestedproperty-toaSymfonyentity?【发布时间】:2021-09-2123:14:45【问题描述】:我正在将JSON反序列化为一个php类(一个Symfony实体),它... 查看详情

我正在尝试使用 .NET 3.1 将 JSON 反序列化为对象列表

】我正在尝试使用.NET3.1将JSON反序列化为对象列表【英文标题】:IamtryingtodeserializeaJSONintoalistofobjectsusing.NET3.1【发布时间】:2021-12-1020:03:34【问题描述】:我有以下Json:"Id":"2727","Region":"US","Data":["Title":"Director","JobDescription":"Coordin... 查看详情

使用 kotlinx.serialization 将 json 对象属性反序列化为字符串

】使用kotlinx.serialization将json对象属性反序列化为字符串【英文标题】:DeserializingajsonobjectpropertytoaStringusingkotlinx.serialization【发布时间】:2021-01-1212:33:18【问题描述】:给定json如下,payload对象的结构会有所不同:"id":1,"displayName"... 查看详情

csharp使用newtonsoftjson.net将任何对象序列化/反序列化为json(代码片段)

查看详情

如何将带有子属性的 JSON 反序列化为 C# 中的 ONE 对象

】如何将带有子属性的JSON反序列化为C#中的ONE对象【英文标题】:HowtodeserializeJSONwithchildattributeintoONEobjectinC#【发布时间】:2019-10-0600:10:08【问题描述】:我的JSON对象由一致的属性udid、date、event_id和parameters内部的不同但已知的... 查看详情

使用 Newtonsoft 将 JSON 反序列化为 .NET 对象(或者可能是 LINQ to JSON?)

】使用Newtonsoft将JSON反序列化为.NET对象(或者可能是LINQtoJSON?)【英文标题】:DeserializingJSONto.NETobjectusingNewtonsoft(orLINQtoJSONmaybe?)【发布时间】:2011-06-1214:06:07【问题描述】:我知道有一些关于Newtonsoft的帖子,所以希望这不是重... 查看详情

在 Azure 移动应用服务后端将字符串属性反序列化为 Json 对象

】在Azure移动应用服务后端将字符串属性反序列化为Json对象【英文标题】:DeserializestringPropertyasJsonObjectinAzureModileAppServiceBackend【发布时间】:2020-09-3006:57:04【问题描述】:我遇到了与here发布的类似问题除了我使用的是Azure移动... 查看详情

Json.net 将数字属性序列化为字符串

】Json.net将数字属性序列化为字符串【英文标题】:Json.netserializenumericpropertiesasstring【发布时间】:2017-01-2408:41:39【问题描述】:我正在使用JsonConvert.SerializeObject序列化模型对象。服务器期望所有字段都是字符串。我的模型对象... 查看详情

如何将 JSON 反序列化为具有多个 List<T> 参数的 .NET 对象?

】如何将JSON反序列化为具有多个List<T>参数的.NET对象?【英文标题】:HowcanIdeserializeaJSONtoa.NETobjectwithseveralList<T>parameters?【发布时间】:2022-01-2320:42:36【问题描述】:我正在使用thislibrary(FireSharp)访问Firebase。我检索了一... 查看详情

System.Text.Json - 将嵌套对象反序列化为字符串

...ystem.Text.Json.JsonSerializer部分反序列化模型,因此其中一个属性被读取为包含原始JSON的字符串。publicclassSomeModelpublicintI 查看详情

无法将 JSON 数组反序列化为类型 - Json.NET

】无法将JSON数组反序列化为类型-Json.NET【英文标题】:CannotdeserializeJSONarrayintotype-Json.NET【发布时间】:2012-03-1605:03:23【问题描述】:我正在尝试将json数据反序列化为模型类,但我失败了。这是我的工作:publicCountryModelGetCountries... 查看详情

将 JSON 反序列化为 C# 类,其中 JSON 中的属性名称是动态的

】将JSON反序列化为C#类,其中JSON中的属性名称是动态的【英文标题】:DeserializingJSONtoC#classwherepropertynamesintheJSONaredynamic【发布时间】:2021-11-0606:49:40【问题描述】:我正在使用JSON.NET包来反序列化对C#类的JSON响应,但json的格式... 查看详情

Json.NET:反序列化嵌套字典

】Json.NET:反序列化嵌套字典【英文标题】:Json.NET:Deserializingnesteddictionaries【发布时间】:2011-09-1822:48:15【问题描述】:将对象反序列化为Dictionary(JsonConvert.DeserializeObject&lt;IDictionary&lt;string,object&gt;&gt;(json))时,嵌套... 查看详情

将 JSON 反序列化为匿名对象

】将JSON反序列化为匿名对象【英文标题】:DeserializeJSONtoanonymousobject【发布时间】:2011-10-1719:16:55【问题描述】:在C#中,我已经通过使用这样的代码成功地将匿名对象序列化为JSON...varobj=newAmount=108,Message="Hello";JavaScriptSerializerser... 查看详情