2017-07-30 8 views
1

私はsimilar problemsを見つけましたが、私の場合は解決策がありません。C#json配列をnewtonsoft json.netを使用してオブジェクトのリストに変換する

私のJSONは次のようになります。

using System; 
using System.Threading.Tasks; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 
using System.Collections.Generic; 

namespace sqlite_test 
{ 
    public class Program 
    { 
    public static void Main() 
    { 
     int item = 19297; 

     string json = ESIHelper.MarketFetch.getMarketData((int)ESIHelper.Regions.Domain,item,"sell",1).Result; 
     ESIHelper.Models.MarketOrderList obj = JsonConvert.DeserializeObject<ESIHelper.Models.MarketOrderList>(json); 
    } 
    } 
} 

とメモリで

using System.Collections.Generic; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

namespace ESIHelper.Models 
{ 
    public class MarketOrder 
    { 
    [Newtonsoft.Json.JsonProperty(PropertyName = "duration")] 
    public int duration { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "is_buy_order")] 
    public bool is_buy_order { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "issued")] 
    public string issued { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "location_id")] 
    public int location_id { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "min_volume")] 
    public int min_volume { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "order_id")] 
    public int order_id { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "price")] 
    public double price { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "range")] 
    public string range { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "type_id")] 
    public int type_id { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "volume_remain")] 
    public int volume_remain { get; set; } 
    [Newtonsoft.Json.JsonProperty(PropertyName = "volume_total")] 
    public int volume_total { get; set; } 
    } 

    public class MarketOrderList 
    { 
    public List<MarketOrder> MarketOrder { get; set; } 
    } 
} 

、私のJSON文字列:処理のための私のコードの

{"array": [ 
    {"order_id": 4923887462, "type_id": 19297, "location_id": 60008494, "volume_total": 1, "volume_remain": 1, "min_volume": 1, "price": 130000000.0, "is_buy_order": false, "duration": 90, "issued": "2017-07-25T16:40:18Z", "range": "region"}, 
    {"order_id": 4926414947, "type_id": 19297, "location_id": 60008494, "volume_total": 1, "volume_remain": 1, "min_volume": 1, "price": 92000000.0, "is_buy_order": false, "duration": 90, "issued": "2017-07-29T06:47:29Z", "range": "region"}, 
    {"order_id": 4927013184, "type_id": 19297, "location_id": 60008494, "volume_total": 1, "volume_remain": 1, "min_volume": 1, "price": 91999989.82, "is_buy_order": false, "duration": 90, "issued": "2017-07-29T22:26:05Z", "range": "region"}, 
    {"order_id": 4927082974, "type_id": 19297, "location_id": 60008494, "volume_total": 2, "volume_remain": 2, "min_volume": 1, "price": 91999989.81, "is_buy_order": false, "duration": 90, "issued": "2017-07-30T00:22:36Z", "range": "region"} 
]} 

関連部分はこのようになりますjsonでは期待通りですが、objはnullです。

私は.NETコア1.1とNewtonsoft Json.net 10.0.3を使用しています。

+0

あなたのJSONでルートオブジェクトの唯一のプロパティは、 'である{ "アレイ":[...]}' 'が、あなたのMarketOrderList'のみ' MarketOrder'という名前のプロパティを持っている - ではない '配列'。 – dbc

答えて

1

あなたMarketOrderListクラスでMarketOrderプロパティに[JsonProperty]属性を追加していなかったので、あなたは、空のオブジェクトを取得している、とプロパティ名はJSONにあるものと一致していません。これは次のようになります。

public class MarketOrderList 
{ 
    [JsonProperty(PropertyName = "array")] 
    public List<MarketOrder> MarketOrder { get; set; } 
} 

ただし、別の問題があります。あなたのJSONのorder_idの値が大きすぎて、intに収まりません。 MarketOrderクラスのorder_idプロパティの宣言をlongに変更して機能させる必要があります。

public class MarketOrder 
{ 
    ... 

    [JsonProperty(PropertyName = "order_id")] 
    public long order_id { get; set; } 

    ... 
} 

これら2つの変更を加えれば、それはうまくデシリアライズされます。

フィドル:https://dotnetfiddle.net/TcAfAq

+0

恐ろしい!それはそれを修正した。あなたの深い答えをありがとう。 – eiton

+0

うれしい私は助けることができます。 –

関連する問題