我需要在包含动态值范围配置的json文件bands
中定义。它们将来可能会改变,所以我希望它看起来像这样:
"Bands": {
"5-15": [ 5000, 15000 ],
"15-30": [ 15000, 30000 ],
"30-45": [ 30000, 45000 ],
"45-60": [ 45000, 60000 ],
"60-100": [ 60000, 100000 ]
}
是否可以读取此json格式并将其存储在对象中?
我尝试过:
public class BandsMapping
{
public List<Bands> Bands { get; set; }
}
public class Bands
{
public string Name { get; set; }
public List<int> ValueRanges { get; set; }
}
但是失败,因为json文件中既没有Name
也没有ValueRanges
。但是我希望json文件看起来像这样。
关于如何实现该目标的任何想法?
您应该将Dictionary<string, List<int>>
或Dictionary<string, int[]>
用于Bands
内容
public class BandsMapping
{
public Dictionary<string, List<int>> Bands { get; set; }
}
字典键代表具有范围的string
,字典值是一个数组或整数值列表。您还可以使用Bands
Select
项目列表var result = JsonConvert.DeserializeObject<BandsMapping>(jsonString);
var bandsList = result.Bands
.Select(kvp => new Bands { Name = kvp.Key, ValueRanges = kvp.Value })
.ToList();
以下代码将使您能够根据需要将JSON字符串转换为.NET对象
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var json = @"
{
""Bands"": {
""5-15"": [ 5000, 15000 ],
""15-30"": [ 15000, 30000 ],
""30-45"": [ 30000, 45000 ],
""45-60"": [ 45000, 60000 ],
""60-100"": [ 60000, 100000 ]
}
}";
var bandsMapping = new BandsMapping();
bandsMapping.Bands = JsonConvert.DeserializeObject<JObject>(json)["Bands"].Children().Select(x =>
{
var band = (JProperty)x;
return new Band() {
Name = band.Name,
ValueRanges = (List<int>)band.Value.ToObject(typeof(List<int>))
};
}).ToList();
// pretty print the JSON of your new .NET object
Console.Write(JsonConvert.SerializeObject(bandsMapping, Formatting.Indented));
}
}
public class BandsMapping
{
public List<Band> Bands { get; set; }
}
public class Band
{
public string Name { get; set; }
public List<int> ValueRanges { get; set; }
}