C# 如何将此JSON字符串解析为2个列表<;字符串>;

C# 如何将此JSON字符串解析为2个列表<;字符串>;,c#,json,deserialization,C#,Json,Deserialization,我很难理解如何解析这个JSON字符串。 如图所示,JSON字符串中有两个列表。“出价”和“要求” 例如,对于投标,我们有: 0.035314,25.986 0.035313,6.947 etc 目标是创建两个列表,在列表中的每个元素包含上述内容的地方进行出价和询问。例如,每个索引都包含此信息:“0.035314,25.986”等 在执行此操作时,将如何接近此字符串 预期输出应理解如下: List<String> bidsLIST = new List<String>();

我很难理解如何解析这个JSON字符串。 如图所示,JSON字符串中有两个列表。“出价”和“要求”

例如,对于投标,我们有:
0.035314,25.986
0.035313,6.947
etc

目标是创建两个列表,在列表中的每个元素包含上述内容的地方进行出价和询问。例如,每个索引都包含此信息:“0.035314,25.986”等
在执行此操作时,将如何接近此字符串

预期输出应理解如下:

List<String> bidsLIST = new List<String>();
List<String> asksLIST = new List<String>();
bidsLIST.Add("0.035314,25.986");
bidsLIST.Add("0.035313,6.947");

asksLIST .Add("0.035319,1.139");
asksLIST .Add("0.03532,28.381");
此代码不完全正确:

using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
void testparseJSON()
{
    String responseBody = "{" +
                            '"' + "bids" + '"' + ":[[0.035314,25.986],[0.035313,6.947],[0.035312,17.441],[0.035308,4],[0.0353,6.188]]," +
                            '"' + "asks" + '"' + ":[[0.035319,1.139],[0.03532,28.381],[0.035324,6.7],[0.035329,2.307],[0.03533,6.868]]," +
                            '"' + "nonce" + '"' + ":451939443}";
    var deserializedTickers = JsonConvert.DeserializeObject<Dictionary<List<String>, bidsasks>>(responseBody);
    foreach (var bidsasks in deserializedTickers)
    {
        var Bids = bidsasks.Value.bids;
        var Asks = bidsasks.Value.asks;
        if (Bids != null && Asks != null)
        {
            //How to get the 2 lists here?
        }
    }
}
public class bidsasks
{
    public List<String> bids { get; set; }
    public List<String> asks { get; set; }
}
使用Newtonsoft.Json.Linq;
使用Newtonsoft.Json;
void testparseJSON()
{
字符串responseBody=“{”+
“+”投标文件“+”:[[0.035314,25.986],[0.035313,6.947],[0.035312,17.441],[0.035308,4],[0.0353,6.188],”+
“+”要求“+”“+”:[[0.035319,1.139],[0.03532,28.381],[0.035324,6.7],[0.035329,2.307],[0.03533,6.868],”+
““+”nonce“+”“+”:451939443}”;
var deserializedTickers=JsonConvert.DeserializeObject(responseBody);
foreach(反序列化tickers中的var bidsasks)
{
var Bids=bidsasks.Value.Bids;
var Asks=bidsasks.Value.Asks;
if(Bids!=null&&Asks!=null)
{
//如何在此处获取这两个列表?
}
}
}
公共类投标书
{
公共列表出价{get;set;}
公共列表要求{get;set;}
}

您需要一个中间类来反映JSON结构:

public class JsonBidsAsks {
    public List<List<string>> bids { get; set; }
    public List<List<string>> asks { get; set; }
}
var deserializedTicker = JsonConvert.DeserializeObject<JsonBidsAsks>(responseBody);
var ans = new bidsasks {
    bids = deserializedTicker.bids.Select(ba => ba.Join(",")).ToList(),
    asks = deserializedTicker.asks.Select(aa => aa.Join(",")).ToList(),
};
公共类JsonBidsAsks{
公共列表出价{get;set;}
公共列表要求{get;set;}
}
然后可以解析JSON并转换为所需的结构:

public class JsonBidsAsks {
    public List<List<string>> bids { get; set; }
    public List<List<string>> asks { get; set; }
}
var deserializedTicker = JsonConvert.DeserializeObject<JsonBidsAsks>(responseBody);
var ans = new bidsasks {
    bids = deserializedTicker.bids.Select(ba => ba.Join(",")).ToList(),
    asks = deserializedTicker.asks.Select(aa => aa.Join(",")).ToList(),
};
var deserializedTicker=JsonConvert.DeserializeObject(responseBody);
var ans=新的投标书{
bids=deserializedTicker.bids.Select(ba=>ba.Join(“,”).ToList(),
asks=反序列化的ticker.asks.Select(aa=>aa.Join(“,”).ToList(),
};

您需要一个中间类来反映JSON结构:

public class JsonBidsAsks {
    public List<List<string>> bids { get; set; }
    public List<List<string>> asks { get; set; }
}
var deserializedTicker = JsonConvert.DeserializeObject<JsonBidsAsks>(responseBody);
var ans = new bidsasks {
    bids = deserializedTicker.bids.Select(ba => ba.Join(",")).ToList(),
    asks = deserializedTicker.asks.Select(aa => aa.Join(",")).ToList(),
};
公共类JsonBidsAsks{
公共列表出价{get;set;}
公共列表要求{get;set;}
}
然后可以解析JSON并转换为所需的结构:

public class JsonBidsAsks {
    public List<List<string>> bids { get; set; }
    public List<List<string>> asks { get; set; }
}
var deserializedTicker = JsonConvert.DeserializeObject<JsonBidsAsks>(responseBody);
var ans = new bidsasks {
    bids = deserializedTicker.bids.Select(ba => ba.Join(",")).ToList(),
    asks = deserializedTicker.asks.Select(aa => aa.Join(",")).ToList(),
};
var deserializedTicker=JsonConvert.DeserializeObject(responseBody);
var ans=新的投标书{
bids=deserializedTicker.bids.Select(ba=>ba.Join(“,”).ToList(),
asks=反序列化的ticker.asks.Select(aa=>aa.Join(“,”).ToList(),
};

您可以将json反序列化为匿名类型:

var template = new
{
    bids = new[]
    {
        new[] {1.0, 1.0}
    },
    asks = new[]
    {
        new[] {1.0, 1.0}
    },
};

var parsedJson = JsonConvert.DeserializeAnonymousType(responseBody, template);
现在只需在两个列表中加入
出价
询问

var bidsLIST = parsedJson.bids.Select(b => string.Join(",", b)).ToList();
var asksLIST = parsedJson.asks.Select(a => string.Join(",", a)).ToList();   

您可以将json反序列化为匿名类型:

var template = new
{
    bids = new[]
    {
        new[] {1.0, 1.0}
    },
    asks = new[]
    {
        new[] {1.0, 1.0}
    },
};

var parsedJson = JsonConvert.DeserializeAnonymousType(responseBody, template);
现在只需在两个列表中加入
出价
询问

var bidsLIST = parsedJson.bids.Select(b => string.Join(",", b)).ToList();
var asksLIST = parsedJson.asks.Select(a => string.Join(",", a)).ToList();   

在检查了@NetMage的答案之后,我对代码进行了一些操作,并且没有任何问题

public class bidsasks
{
    public List<List<string>> bids { get; set; }
    public List<List<string>> asks { get; set; }
    public int nonce { get; set; }

}
public static void testparseJSON()
{
    String responseBody = "{" +
                    '"' + "bids" + '"' + ":[[0.035314,25.986],[0.035313,6.947],[0.035312,17.441],[0.035308,4],[0.0353,6.188]]," +
                    '"' + "asks" + '"' + ":[[0.035319,1.139],[0.03532,28.381],[0.035324,6.7],[0.035329,2.307],[0.03533,6.868]]," +
                    '"' + "nonce" + '"' + ":451939443}";
        var deserializedTicker = JsonConvert.DeserializeObject<bidsasks>(responseBody);
        var ans = new bidsasks
        {
            bids = deserializedTicker.bids,
            asks = deserializedTicker.asks
        };
        for (int i = 0; i < ans.bids.Count; i++)
        {
            Console.WriteLine(String.Format("PRICE", ans.bids[i][0]));
            Console.WriteLine(String.Format("QTY", ans.bids[i][1]));
        }
        for (int i = 0; i < ans.asks.Count; i++)
        {
            Console.WriteLine(String.Format("PRICE", ans.asks[i][0]));
            Console.WriteLine(String.Format("QTY", ans.asks[i][1]));
        }
    }
}
公共类bidsasks
{
公共列表出价{get;set;}
公共列表要求{get;set;}
公共int nonce{get;set;}
}
公共静态void testparseJSON()
{
字符串responseBody=“{”+
“+”投标文件“+”:[[0.035314,25.986],[0.035313,6.947],[0.035312,17.441],[0.035308,4],[0.0353,6.188],”+
“+”要求“+”“+”:[[0.035319,1.139],[0.03532,28.381],[0.035324,6.7],[0.035329,2.307],[0.03533,6.868],”+
““+”nonce“+”“+”:451939443}”;
var deserializedTicker=JsonConvert.DeserializeObject(responseBody);
var ans=新的投标书
{
bids=反序列化ticker.bids,
asks=反序列化的ticker.asks
};
for(int i=0;i
在检查了@NetMage的答案后,我对该代码进行了一些操作,并且工作正常

public class bidsasks
{
    public List<List<string>> bids { get; set; }
    public List<List<string>> asks { get; set; }
    public int nonce { get; set; }

}
public static void testparseJSON()
{
    String responseBody = "{" +
                    '"' + "bids" + '"' + ":[[0.035314,25.986],[0.035313,6.947],[0.035312,17.441],[0.035308,4],[0.0353,6.188]]," +
                    '"' + "asks" + '"' + ":[[0.035319,1.139],[0.03532,28.381],[0.035324,6.7],[0.035329,2.307],[0.03533,6.868]]," +
                    '"' + "nonce" + '"' + ":451939443}";
        var deserializedTicker = JsonConvert.DeserializeObject<bidsasks>(responseBody);
        var ans = new bidsasks
        {
            bids = deserializedTicker.bids,
            asks = deserializedTicker.asks
        };
        for (int i = 0; i < ans.bids.Count; i++)
        {
            Console.WriteLine(String.Format("PRICE", ans.bids[i][0]));
            Console.WriteLine(String.Format("QTY", ans.bids[i][1]));
        }
        for (int i = 0; i < ans.asks.Count; i++)
        {
            Console.WriteLine(String.Format("PRICE", ans.asks[i][0]));
            Console.WriteLine(String.Format("QTY", ans.asks[i][1]));
        }
    }
}
公共类bidsasks
{
公共列表出价{get;set;}
公共列表要求{get;set;}
公共int nonce{get;set;}
}
公共静态void testparseJSON()
{
字符串responseBody=“{”+
“+”投标文件“+”:[[0.035314,25.986],[0.035313,6.947],[0.035312,17.441],[0.035308,4],[0.0353,6.188],”+
“+”要求“+”“+”:[[0.035319,1.139],[0.03532,28.381],[0.035324,6.7],[0.035329,2.307],[0.03533,6.868],”+
““+”nonce“+”“+”:451939443}”;
var deserializedTicker=JsonConvert.DeserializeObject(responseBody);
var ans=新的投标书
{
bids=反序列化ticker.bids,
asks=反序列化的ticker.asks
};
for(int i=0;i
查看Json对象。它没有
List
类型的键(显然)。Json对象中每个键的值都是带有(浮点)数字的列表,这显然与
bisaks
类根本不匹配。在尝试反序列化数据时,必须遵循Json数据的结构,并使用和/或创建与此结构匹配的类/类型。你不能只是创建和使用一些不相关的结构类,然后希望反序列化程序猜测你的意图……如果你需要帮助解析JSON,那么发布JSON确实会有帮助,而不是连接strin的代码