如何反序列化JSON并将其映射到字符串对象

时间:2016-06-23 02:54:44

标签: c# json-deserialization

我是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}"]

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

 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",

  ...

]

任何建议和帮助都将非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的Web响应是一个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);