我正在使用带有C#4的VS2010。我的JSON类似于以下内容:
{"ItemDetails":{"Item":{"val": [
{"Description":"Desk1","Amount":"100.00"},
{"Description":"Desk2","Amount":"200.00"},
{"Description":"Desk3","Amount":"300.00"}]}}}
我希望将所有金额值都放入一个字符串数组中,如下所示:
amount={100.00,200.00,300.00}
我怎么能实现这个?我是否必须循环访问JSON对象,还是有其他方法可以执行此操作?
答案 0 :(得分:0)
我建议使用NewtonSofts JSON库,但另一种(但很难看)的方法是使用正则表达式。
var json = "{\"ItemDetails\":{\"Item\":{\"val\": [ " +
"{\"Description\":\"Desk1\",\"Amount\":\"100.00\",}," +
"{\"Description\":\"Desk2\",\"Amount\":\"200.00\",}," +
"{\"Description\":\"Desk3\",\"Amount\":\"300.00\"}}}";
// What I think you want
var amount = Regex.Matches(json, "Amount\":\"(.*?)\"").Cast<Match>().Select(m => m.Groups[1].Value).ToArray();
// Values 'converted' to json
var jsonAmount = "amount={" + string.Join(",", amount) + "}";
答案 1 :(得分:0)
使用Json.Net,您可以使用LINQ-to-JSON查询执行此操作:
string json = @"
{
""ItemDetails"": {
""Item"": {
""val"": [
{
""Description"": ""Desk1"",
""Amount"": ""100.00""
},
{
""Description"": ""Desk2"",
""Amount"": ""200.00""
},
{
""Description"": ""Desk3"",
""Amount"": ""300.00""
}
]
}
}
}";
JToken token = JToken.Parse(json);
string[] amounts = token.SelectToken("ItemDetails.Item.val")
.Children()
.Select(t => t["Amount"].ToString())
.ToArray();
Console.WriteLine("amount={" + string.Join(",", amounts) + "}");
输出:
amount={100.00,200.00,300.00}
答案 2 :(得分:-1)
我假设你没有使用JSON.NET。如果是这种情况,那么你可以尝试一下。
它具有以下功能 -
LINQ to JSON JsonSerializer用于快速将.NET对象转换为JSON并再次返回 Json.NET可以选择生成格式良好的缩进JSON,用于调试或显示 可以将类似JsonIgnore和JsonProperty的属性添加到类中以自定义类的序列化方式 能够将JSON转换为XML和从XML转换 支持多种平台:.NET,Silverlight和Compact Framework 看下面的例子。
在这个example中,JsonConvert对象用于将对象转换为JSON和从JSON转换对象。它有两种静态方法用于此目的。它们是SerializeObject(Object obj)和DeserializeObject(String json) -
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string json = JsonConvert.SerializeObject(product);
//{
// "Name": "Apple",
// "Expiry": "2008-12-28T00:00:00",
// "Price": 3.99,
// "Sizes": [
// "Small",
// "Medium",
// "Large"
// ]
//}
Product deserializedProduct = JsonConvert.DeserializeObject(json);