json对象,我的对象应该怎么样?

时间:2013-03-28 11:31:39

标签: c# .net json json.net

我有一个像这样的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的新手,所以请原谅我,如果这是微不足道的。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您的NodeDataArray被定义为字符串数组,而您的JSON文档明确将其定义为对象。

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

Paste JSON As Classes

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; }
}

反序列化似乎完美无缺(注意我已经修改了属性名称以遵守常用的命名准则)。

Watch

相关问题