使用C# json 二维数组 反序列化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C# json 二维数组 反序列化相关的知识,希望对你有一定的参考价值。
要解析一个json的二维数组,比如"[[1,2,3,4],[11,22,33,44],...[11,21,31,41]]"
上述数组内的第二层数组的元素长度固定,
使用C#如何解析?用DataContrast应该怎么写?
arr[0] = new int[] 1, 2, 3, 4 ;
arr[1] = new int[] 11, 22, 33, 44 ;
System.Web.Script.Serialization.javascriptSerializer jsSeria = new System.Web.Script.Serialization.JavaScriptSerializer();
string s = jsSeria.Serialize(arr); //序列化
int[][] arr2 = jsSeria.Deserialize(s, typeof(int[][])) as int[][];//反序列化 参考技术A 你直接试用Newton.Json就可以解析了
在 C# 中将 JSON 数组反序列化为对象
【中文标题】在 C# 中将 JSON 数组反序列化为对象【英文标题】:Deserializing JSON Array to Object in C# 【发布时间】:2018-02-04 09:00:24 【问题描述】:我对 C# 比较陌生(以前使用 HTML/JS/Angular 的经验),我在反序列化从我正在使用的 API 中返回的 JSON 时遇到问题。
"titles":[
"lastUnlock":"2016-12-28T16:34:36.0390000Z",
"titleId":566278,
"serviceConfigId":"6ee10100-671e-4fc4-8cf1-91700008a406",
"titleType":"DGame",
"platform":"Durango",
"name":"Game1",
"earnedAchievements":4,
"currentGamerscore":60,
"maxGamerscore":1000
,
"lastUnlock":"2016-08-05T13:02:18.4140000Z",
"titleId":10027721,
"serviceConfigId":"28dd0100-1521-414e-a1d8-f0ba009902c9",
"titleType":"DGame",
"platform":"Durango",
"name":"Game2",
"earnedAchievements":17,
"currentGamerscore":1000,
"maxGamerscore":1000
,
"lastUnlock":"2016-05-02T20:52:40.3705214Z",
"titleId":62572131,
"serviceConfigId":"54240100-7870-4a47-8cec-7cfd03bac663",
"titleType":"DGame",
"platform":"Durango",
"name":"Game3",
"earnedAchievements":35,
"currentGamerscore":1000,
"maxGamerscore":1000
,
],
"pagingInfo":
"continuationToken":null,
"totalRecords":86
问题是我不确定如何将其反序列化为对象数组。
我已经创建了一个对象类:
public class Game
public string name get; set;
public string gamertag get; set;
public string platform get; set;
public int earnedAchievements get; set;
public string currentGamerscore get; set;
public string maxGamerscore get; set;
public string lastUnlock get; set;
从那里我尝试使用 JsonConvert.DeserializeObject(result) 但这只是返回不可用的“CompleteAdmin.Controllers.AchievementsAPIController+Game”。
谁能告诉我这应该如何设置?最终,我的目标是将其放入数据库。 :)
谢谢。
【问题讨论】:
T这是使用Json.NET的方法newtonsoft.com/json/help/html/DeserializeObject.htm 据我所知,这几乎是我当前的设置:games = JsonConvert.DeserializeObjectpagingInfo
倒数的第二个。
【参考方案1】:
很简单
在 Visual Studio 中右键单击解决方案并选择“管理 NuGet 包”,将在顶部搜索类型“newtonsoft”中打开一个菜单,选择带有黑色图标的第一个选项。并添加到您的项目中。然后写下。
public class Games
public Game[] titles get; set;
public class Game
public string name get; set;
public string gamertag get; set;
public string platform get; set;
public int earnedAchievements get; set;
public string currentGamerscore get; set;
public string maxGamerscore get; set;
public string lastUnlock get; set;
在页面加载或您想要结果的地方:
string jsonObject = @"
'titles':[
'lastUnlock':'2016-12-28T16:34:36.0390000Z',
'titleId':566278,
'serviceConfigId':'6ee10100-671e-4fc4-8cf1-91700008a406',
'titleType':'DGame',
'platform':'Durango',
'name':'Game1',
'earnedAchievements':4,
'currentGamerscore':60,
'maxGamerscore':1000
,
'lastUnlock':'2016-08-05T13:02:18.4140000Z',
'titleId':10027721,
'serviceConfigId':'28dd0100-1521-414e-a1d8-f0ba009902c9',
'titleType':'DGame',
'platform':'Durango',
'name':'Game2',
'earnedAchievements':17,
'currentGamerscore':1000,
'maxGamerscore':1000
,
'lastUnlock':'2016-05-02T20:52:40.3705214Z',
'titleId':62572131,
'serviceConfigId':'54240100-7870-4a47-8cec-7cfd03bac663',
'titleType':'DGame',
'platform':'Durango',
'name':'Game3',
'earnedAchievements':35,
'currentGamerscore':1000,
'maxGamerscore':1000
,
],
'pagingInfo':
'continuationToken':null,
'totalRecords':86
";
var games = JsonConvert.DeserializeObject<Games>(jsonObject);
【讨论】:
【参考方案2】:只需添加一个额外的类来包含您的Titles
集合(或Games
,最好下定决心......)
public class Container
public Game[] Titles get; set;
现在您可以像这样轻松反序列化:
var res = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Container>(jsonObject);
要使用它,请将System.Web.Extensions
的引用添加到您的项目中。
请注意,我必须从您的 JSON 中删除一个逗号才能使其正常工作:
, <------ this comma should not be there
],
"pagingInfo":
"continuationToken":null,
"totalRecords":86
【讨论】:
以上是关于使用C# json 二维数组 反序列化的主要内容,如果未能解决你的问题,请参考以下文章
使用字符串、int 数组反序列化 json - .net core C#