私はこのJSONを持っています:
[
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 1",
"Values": [
"Acc 1"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "1",
"Values": [
"1"
]
}
}
],
"Name": "account",
"Id": "1"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 2",
"Values": [
"Acc 2"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "2",
"Values": [
"2"
]
}
}
],
"Name": "account",
"Id": "2"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 3",
"Values": [
"Acc 3"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "3",
"Values": [
"3"
]
}
}
],
"Name": "account",
"Id": "2"
}
]
そして、私はこれらのクラスを持っています:
public class RetrieveMultipleResponse
{
public List<Attribute> Attributes { get; set; }
public string Name { get; set; }
public string Id { get; set; }
}
public class Value
{
[JsonProperty("Value")]
public string value { get; set; }
public List<string> Values { get; set; }
}
public class Attribute
{
public string Key { get; set; }
public Value Value { get; set; }
}
私は以下のコードを使用して上記のJSONをデシリアライズしようとしています:
var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);
しかし、私はこのエラーを受け取っています:
現在のJSON配列(例:[1,2,3])を型 'test.Model.RetrieveMultipleResponse'に逆シリアル化できません。型には正しく逆シリアル化するためにJSONオブジェクト(例:{"name": "value"})が必要です。このエラーを修正するには、JSONをJSONオブジェクト(例:{"name": "value"})に変更するか、デシリアライズされた型を配列またはListなどのコレクションインターフェイス(ICollection、IList)を実装する型に変更しますJSON配列からデシリアライズされます。 JsonArrayAttributeをタイプに追加して、JSON配列からデシリアライズを強制することもできます。パス ''、行1、位置1。
Json文字列は角括弧([]
)で囲まれているため、単一のRetrieveMultipleResponse
オブジェクトではなく配列として解釈されます。したがって、たとえばRetrieveMultipleResponse
のコレクションを入力するには、シリアル化を解除する必要があります。
var objResponse1 =
JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);
(拡張メソッドで)Genericsをサポートしたい場合、これはパターンです...
public static List<T> Deserialize<T>(this string SerializedJSONString)
{
var stuff = JsonConvert.DeserializeObject<List<T>>(SerializedJSONString);
return stuff;
}
次のように使用されます。
var rc = new MyHttpClient(URL);
//This response is the JSON Array (see posts above)
var response = rc.SendRequest();
var data = response.Deserialize<MyClassType>();
MyClassTypeは次のようになります(JSON配列の名前と値のペアに一致する必要があります)
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class MyClassType
{
[JsonProperty(PropertyName = "Id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "Name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "Description")]
public string Description { get; set; }
[JsonProperty(PropertyName = "Manager")]
public string Manager { get; set; }
[JsonProperty(PropertyName = "LastUpdate")]
public DateTime LastUpdate { get; set; }
}
NUGETを使用してNewtonsoft.Jsonをダウンロードし、必要に応じて参照を追加します...
using Newtonsoft.Json;
ソリューションにコメントを追加することはできませんが、それは私にとってはうまくいきませんでした。私のために働いた解決策は使用することでした:
var des = (MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response, typeof(MyClass)); return des.data.Count.ToString();