繁体   English   中英

将JSON字符串转换为C#对象

[英]converting JSON string to C# Object

我试图将JSON字符串反序列化为对象,但是遇到了一个异常,确实很困惑。

"{

\"lastUpdateId\":787618462,
\"bids\":[[\"10451.90000000\",\"0.18884000\"],[\"10451.70000000\",\"0.01770200\"]],

\"asks\":[[\"10457.88000000\",\"0.17060500\"],[\"10458.13000000\",\"0.79300000\"]]

}"

这是需要的对象:

 public class OrderBook
    {
        [JsonProperty("lastUpdateId")]
        public int lastUpdateId { get; set; }

        [JsonProperty("asks")]
        public List<OrderBookOrder> Asks { get; set; }

        [JsonProperty("bids")]
        public List<OrderBookOrder> Bids { get; set; }

        public OrderBook(List<OrderBookOrder> asks, List<OrderBookOrder> bids)
        {
            Asks = asks;
            Bids = bids;
        }
        public OrderBook()
        {

        }
    }

    public class OrderBookOrder
    {
        public decimal Price { get; set; }
        public decimal Volume { get; set; }

        public OrderBookOrder(decimal price, decimal volume)
        {
            Price = price;
            Volume = volume;
        }
    }

所以我用NewtonSoft Json将字符串转换为对象

 public static implicit operator OrderBook(ApiResponse response)
        {
            return Utilities.ConverFromJason<OrderBook>(response);
        }

我认为问题是将两个数组(出价和要价)减半,但不能解决问题。 非常感谢您的帮助!

您提供的JSON必须具有如下所示的类结构

public class RootObject
{
    public int lastUpdateId { get; set; }
    public List<List<string>> bids { get; set; }
    public List<List<string>> asks { get; set; }
}

最好的选择是使用Newtonsoft.Json(来自nuget)。 您要做的就是:

OrderBook ob = JsonConvert.DeserializeObject<OrderBook>(response.ToString());

您的模型必须是这样的:

public class OrderBook
{
    [JsonProperty("lastUpdateId")]
    public int lastUpdateId { get; set; }
    [JsonProperty("bids")]
    public List<List<string>> bids { get; set; }
    [JsonProperty("asks")]
    public List<List<string>> asks { get; set; }
}

您可以在此处从json字符串中获取合适的模型: http : //json2csharp.com/

重要! 您的所有Json属性必须具有公共getter和setter。 即使您仅序列化或反序列化。

要填充OrderBookOrder对象,必须创建一个特定的方法并在反序列化后调用它。 使用Newtonsoft.Json无法将JSon模型转换为其他模型。

根据您的问题,您的模型类如下所示

public class OrderBook
{

    [JsonProperty("lastUpdateId")]
    public int lastUpdateId { get; set; }

    [JsonProperty("bids")]
    public IList<IList<string>> Bids { get; set; }

    [JsonProperty("asks")]
    public IList<IList<string>> Asks { get; set; }
}

有效的json格式如下所示

{
"lastUpdateId": 787618462,
"bids": [
    [".90000000 ", "0.18884000 "],
    ["10451.70000000 ", "0.01770200 "]
],
"asks": [
    ["10457.88000000", "0.17060500"],
    ["10458.13000000", "0.79300000"]
]
}

您可以为DeserializeObject代码编写

public static implicit operator OrderBook(ApiResponse response)
        {
            return JsonConvert.DeserializeObject<OrderBook>(response);
        }

如果不想用属性污染模型,也可以使用Fluent-JSON.NET。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM