#c# #json #json-deserialization
#c# #json #json-десериализация
Вопрос:
Мне нужно десериализовать некоторые данные на стороне сервера от третьей стороны (это делается на стороне сервера по соображениям доступности, а не по выбору). Однако я получаю
Я вызываю следующую строку кода:
var data = new JavaScriptSerializer().Deserialize<TPOData>(responseFromServer);
Ответ с сервера следующий:
{
"name": "TPO",
"columns": [
"ogc_fid",
"orderref",
"status",
"entityref",
"treetype",
"comments",
"orderyear",
"label",
"dist"
],
"data": [
[
360,
"07/1970/WR ",
"Tree ",
"T6 ",
"Chestnut",
"Position checked against Scanned Order 13/11/2008",
1970,
"479055.705,204698.514",
33
],
[
361,
"07/1970/WR ",
"Tree ",
"T7 ",
"May",
"Position checked against Scanned Order 13/11/2008",
1970,
"479061.747,204685.09",
35
]
]
}
Я пытаюсь десериализовать в объект TPOData:
public class TPOData
{
public string name;
public List<string> columns;
public List<List<object>> data;
}
Я попытался изменить данные свойства. В дополнение к вышесказанному я пробовал List<object>
, List<object[]>
, object[][]
object[]
, object
List<List<string>>
. Я даже пробовал, int
надеясь, что это может преобразовать в,, значения. Ничего не помогло. Я подозреваю, что проблема заключается в том, что данные на 2-м уровне массива объектов представляют собой смесь значений int и string. Я выполнил очень похожую задачу, где 2-й уровень был полностью строковым, поэтому я мог просто использовать List<List<string>>
без проблем.
Любая помощь была бы высоко оценена.
Комментарии:
1. Похоже, что проблема возникает из класса JsonScriptSerializer. Данный JSON-файл десериализуется для объекта вашего класса, когда я использую Newtonsoft.Json. JsonConvert (без каких-либо проблем).
Ответ №1:
Я попробовал ваш пример, и он отлично сработал для меня, используя JavaScriptSerializer
with List<List<object>>
внутри TPOData
класса. Тестовая программа, которую я использовал, скопирована ниже. Обратите внимание, что я использую .NET Framework версии 4.5, на случай, если это имеет значение. Есть ли что-то еще в JSON или вашем коде, которое вы не показали, что может быть причиной проблемы?
class Program
{
static void Main(string[] args)
{
string json = @"
{
""name"": ""TPO"",
""columns"": [
""ogc_fid"",
""orderref"",
""status"",
""entityref"",
""treetype"",
""comments"",
""orderyear"",
""label"",
""dist""
],
""data"": [
[
360,
""07/1970/WR "",
""Tree "",
""T6 "",
""Chestnut"",
""Position checked against Scanned Order 13/11/2008"",
1970,
""479055.705,204698.514"",
33
],
[
361,
""07/1970/WR "",
""Tree "",
""T7 "",
""May"",
""Position checked against Scanned Order 13/11/2008"",
1970,
""479061.747,204685.09"",
35
]
]
}";
var data = new JavaScriptSerializer().Deserialize<TPOData>(json);
Console.WriteLine("name: " data.name);
Console.WriteLine();
foreach (var row in data.data)
{
for (int i = 0; i < data.columns.Count; i )
{
Console.WriteLine(data.columns[i] ": " row[i]);
}
Console.WriteLine();
}
}
public class TPOData
{
public string name;
public List<string> columns;
public List<List<object>> data;
}
}
Вывод:
name: TPO
ogc_fid: 360
orderref: 07/1970/WR
status: Tree
entityref: T6
treetype: Chestnut
comments: Position checked against Scanned Order 13/11/2008
orderyear: 1970
label: 479055.705,204698.514
dist: 33
ogc_fid: 361
orderref: 07/1970/WR
status: Tree
entityref: T7
treetype: May
comments: Position checked against Scanned Order 13/11/2008
orderyear: 1970
label: 479061.747,204685.09
dist: 35