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では、目的の CLR クラスを生成するPaste JSON As Classesと呼ばれる特別な貼り付けを実行できます。

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 に答える