【问题标题】:How to deserialize JSON and map it to an string object如何反序列化 JSON 并将其映射到字符串对象
【发布时间】:2016-06-24 13:12:05
【问题描述】:

我是 JSON 反序列化的新手,正在寻找解决方案。我在网上搜索了许多解决方案,但没有一个符合我的目的。

我有这个从网络服务器获得的示例 JSON 数据:

[943533322,"2016-06-23 02:34:38","1.1","gsQA-telem-pin-test-00","defaultTitleIdType","defaultReleaseT","defaultBuildVersion","14.1.3","2016-06-23 03:34:38","8037412060430813886","pc","telem_test","159.153.136.116","defaultMac","default","{\"defaultCSH\":[{\"defaultCSH1\":1},{\"defaultCSH2\":2}]}","defaultLevel","boot_start",0,"defaultPlayerIdType","defaultPlayerId","2016-06-23 03:34:38","defaultDOB","defaultExperimentId","{\"defaultPIDM\":[{\"defaultPIDM1\":1},{\"defaultPIDM3\":4}]}","{\"defaultDIDM\":[{\"defaultDIDM1\":2},{\"defaultDIDM3\":4}]}",null,"{\"status\":\"boot_start_event\",\"custom\":{\"defaultCEH\":[{\"defaultCEH1\":1},{\"defaultCEH2\":2}]}}",16975,"{\"x-ea-game-id-type\":\"\\\"defaulttitleidtype\\\"\",\"x-ea-taxv\":\"\\\"1.1\\\"\",\"x-ea-env\":\"\\\"test\\\"\",\"x-ea-game-id\":\"\\\"gsqa-telem-pin-test-00\\\"\",\"x-ea-uid\":null,\"x-ea-app-type\":null,\"application-id\":null}"]

我想以这种格式将值反序列化为字符串类型的对象:

 id | serverTS | taxv | tid | tidt | rel | v | sdkv | ts_post | s_id | plat | et | clientIP | mac | loc | custom | lev | en | s | pidt | pid | ts_event | dob | exid | pidm | didm | event_custom | event_params | dt_part | http_header

我在网上看到的所有例子都是针对JSON格式的

{
   "id":"943533322",

   "serverTS":"2016-06-23 02:34:38",

   ...

} 

但是如何反序列化格式为 JSON 的格式

[

  "943533322",

  "2016-06-23 02:34:38",

  ...

]

任何建议和帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 您的 JSON 字符串无效。你可以在这里测试它:json.parser.online.fr
  • 为什么是两个标签? C# 还是 C++?
  • 对不起,我没有放整个 json。缩短时一定犯了某种错误。我正在使用.net 库。所以我猜正确的标签是 c++

标签: c# json-deserialization


【解决方案1】:

您的网络响应是一个 json 数组,而不是一个 json 对象,因此您需要单独提取并解析每个部分。 Json.Net 可能是 C# 中最受欢迎的选项。您需要为数组包含的每种其他类型的对象(包括子对象)定义类型,但如果它们是具有公共属性的 POCO 对象,它基本上是自动完成的。

JArray array = JArray.Parse(jsonString);
List<object> parts = new List<object>();
JArray array = JArray.Parse(jsonString);
parts.Add(array[0].ToObject<int>());
parts.Add(array[1].ToObject<DateTime>());
....
string formattedString = string.Join("|", parts);

如果您可以让 Web 服务为您提供一个 json 对象而不是数组,那么反序列化会变得容易得多。

如果您不介意数组中的子对象仍为 json 格式,您也可以这样做:

formattedString=string.join("|",array);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多