我有一个像这样的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的新手,所以请原谅我,如果这是微不足道的。
答案 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类:
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; }
}
反序列化似乎完美无缺(注意我已经修改了属性名称以遵守常用的命名准则)。