我是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",
...
]
任何建议和帮助都将非常感激。提前谢谢。
答案 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);