JSON вложенный массив. C # DataContractJsonSerializer возвращает ноль - PullRequest
1 голос
/ 22 октября 2019

Я получаю этот JSON:

{"lastUpdateId": 836890951, "bids": [["0.02106900", "0.56000000"], ["0.02106800", "1.38000000"], ["0.02106600", "3.63600000"], [ "0.02106500", "34.28000000"], [ "0.02106100", "41.49400000"], [ "0.02105900", "1.82500000"], [ "0.02105800", "17.91500000"], ["0.02105700", "23.73300000"], [ "0.02105600", "28.47900000"], [ "0.02105500", "18.37500000"]], "спрашивает": [[ "0.02107100", "0.36600000"], [ "0.02107300","0.47400000"], [ "0.02107500", "43.56200000"], [ "0.02107600", "28.49700000"], [ "0.02107700", "10.37400000"], [ "0.02107800", "8.00000000"], [ "0.02107900","17.35500000"], ["0.02108100", "23.74100000"], ["0.02108200", "1.35200000"], ["0.02108300", "2.31900000"]]}}

Я использую DataContractJsonSerializer:

[DataContract]
[Serializable]
public partial class OrderBooK
{
    public OrderBooK(string json)
    {
        OrderBooK deserializedUser = new OrderBooK();
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
        DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
        deserializedUser = ser.ReadObject(ms) as OrderBooK;
        ms.Close();
    }

    public OrderBooK()
    {
    }

    [DataMember(Name = "lastUpdateId")]
    public long LastUpdateId { get; set; }

    [DataMember(Name = "bids")]
    public Bids[] Bids { get; set; }

    [DataMember(Name = "asks")]
    public Asks[] Asks { get; set; }
}

[DataContract]
[Serializable]
public partial class Bids
{
    [DataMember(Name = " ")]
    public double[] values { get; set; }
}

[DataContract]
[Serializable]
public partial class Asks
{
    [DataMember(Name = " ")]
    public double[] values { get; set; }
}

Я получаю значение LastUpdateId и получаю запросы массива и ставки массива, состоящие из 10 элементов каждый. Но вложенные в них массивы значений имеют значение null. Как получить эти данные? Благодаря.

1 Ответ

2 голосов
/ 22 октября 2019

Я взял ваш код и поместил его в небольшое консольное приложение. У меня это работает так:

    class Program
    {
        static void Main(string[] args)
        {

            string json = @"{""lastUpdateId"":836890951,""bids"":[[""0.02106900"",""0.56000000""],[""0.02106800"",""1.38000000""],[""0.02106600"",""3.63600000""],[""0.02106500"",""34.28000000""],[""0.02106100"",""41.49400000""],[""0.02105900"",""1.82500000""],[""0.02105800"",""17.91500000""],[""0.02105700"",""23.73300000""],[""0.02105600"",""28.47900000""],[""0.02105500"",""18.37500000""]],""asks"":[[""0.02107100"",""0.36600000""],[""0.02107300"",""0.47400000""],[""0.02107500"",""43.56200000""],[""0.02107600"",""28.49700000""],[""0.02107700"",""10.37400000""],[""0.02107800"",""8.00000000""],[""0.02107900"",""17.35500000""],[""0.02108100"",""23.74100000""],[""0.02108200"",""1.35200000""],[""0.02108300"",""2.31900000""]]}";

            OrderBook orderBook = Newtonsoft.Json.JsonConvert.DeserializeObject<OrderBook>(json);
        }


    }

    [Serializable]
    public partial class OrderBook
    {
        public long lastUpdateId { get; set; }
        public List<List<double>> bids { get; set; }
        public List<List<double>> asks { get; set; }

    }

Лично мне действительно нравится работать с Lists<>'s вместо Array's. Они обеспечивают гораздо большую гибкость и функциональность и с ними легче работать.

...