2

我有一个这样的json字符串

{ "class": "go.GraphLinksModel",
  "nodeDataArray": [ {"key":"CTR:2", "type":"Controller", "devicename":"ACU-1K", "imageUrl":"../../../../Images/ComputerSpeaker_32.png", "loc":"295 97"} ],
  "linkDataArray": [  ]}

我创建了一个这样的类

public class FloorplanItem
{
    public string Class { get; set; }
    public string[] NodeDataArray { get; set; }
    public string[] LinkDataArray { get; set; }        
}

我正在使用 newtonsoft.json 将 json 反序列化为一个对象,但我遇到了一些错误

JsonConvert.DeserializeObject<FloorplanItem>(json)

错误信息:

{"Error reading string. Unexpected token: StartObject. Path 'nodeDataArray[0]', line 2, position 23."}

我对 json 还是很陌生,所以如果这是微不足道的,请原谅我。

4

2 回答 2

3

使用http://json2csharp.com/。在那里复制json,您将获得以下类:

public class NodeDataArray
{
    public string key { get; set; }
    public string type { get; set; }
    public string devicename { get; set; }
    public string imageUrl { get; set; }
    public string loc { get; set; }
}

public class RootObject
{
    public string @class { get; set; }
    public List<NodeDataArray> nodeDataArray { get; set; }
    public List<object> linkDataArray { get; set; }
}

上述类将与Json.NET兼容

于 2013-03-28T11:34:00.103 回答
1

NodeDataArray被定义为一个字符串数组,而您的 JSON 文档清楚地将其定义为一个对象。

此外,使用Web Essentials 2012,您可以执行名为Paste JSON As Classes的特殊粘贴,它将为您生成所需的 CLR 类:

将 JSON 粘贴为类

public class FloorplanItem
{
    public string Class { get; set; }
    public NodeDataArray[] NodeDataArray { get; set; }
    public object[] LinkDataArray { get; set; }
}

public class NodeDataArray
{
    public string Key { get; set; }
    public string Type { get; set; }
    public string DeviceName { get; set; }
    public string ImageUrl { get; set; }
    public string Loc { get; set; }
}

反序列化似乎工作得很好(注意我已经修复了属性名称以遵守通用命名准则)。

手表

于 2013-03-28T12:00:20.710 回答