C# 无效的JSON基元:。尝试在C中从JSON反序列化#

C# 无效的JSON基元:。尝试在C中从JSON反序列化#,c#,json,json-deserialization,C#,Json,Json Deserialization,我需要从第三方反序列化一些数据服务器端(这是出于可访问性的原因,而不是出于选择而在服务器端完成的)。然而,我明白了 我正在调用以下代码行: var data = new JavaScriptSerializer().Deserialize<TPOData>(responseFromServer); 我正在尝试反序列化为对象TPOData: public class TPOData { public string name; public List<string

我需要从第三方反序列化一些数据服务器端(这是出于可访问性的原因,而不是出于选择而在服务器端完成的)。然而,我明白了

我正在调用以下代码行:

var data = new JavaScriptSerializer().Deserialize<TPOData>(responseFromServer);
我正在尝试反序列化为对象TPOData:

public class TPOData
{
    public string name;
    public List<string> columns;
    public List<List<object>> data;
}
公共类TPOData
{
公共字符串名称;
公共列表列;
公开名单数据;
}
我已经尝试过使属性数据不同。除上述内容外,我还尝试了
列表
列表
对象[][]
对象[]
对象
。我甚至尝试了
List
,希望它可以转换
int
值。没有人帮了忙。我怀疑问题在于对象数组第二级中的数据是int和string值的混合体。我做过一个非常类似的任务,第二级完全是字符串,因此我可以毫无问题地使用
List


任何帮助都将不胜感激。

我尝试了您的示例,在
TPOData
类中使用
JavaScriptSerializer
List
,效果很好。我使用的测试程序复制如下。注意:我使用的是.NETFrameworkV4.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;
    }
}

问题似乎来自JSONScript序列化程序类。当我使用Newtonsoft.JSON.JsonConvert时,给定的JSON stirng反序列化为类的对象(没有任何问题)。
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