pbz*_*pbz 17 c# json.net deserialization
鉴于以下json:
[ {"id":"123", ... "data":[{"key1":"val1"}, {"key2":"val2"}], ...}, ... ]
Run Code Online (Sandbox Code Playgroud)
这是一个更大的树的一部分,我如何将"数据"属性反序列化为:
List<MyCustomClass> Data { get; set; }
Run Code Online (Sandbox Code Playgroud)
要么
List<KeyValuePair> Data { get; set; }
Run Code Online (Sandbox Code Playgroud)
要么
Dictionary<string, string> Data { get; set; }
Run Code Online (Sandbox Code Playgroud)
使用Json.NET?两个版本都可以(我更喜欢List of MyCustomClass).我已经有一个包含其他属性的类,如下所示:
public class SomeData
{
[JsonProperty("_id")]
public string Id { get; set; }
...
public List<MyCustomClass> Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
其中"MyCustomClass"只包含两个属性(Key和Value).我注意到有一个KeyValuePairConverter类听起来像它会做我需要的,但我无法找到如何使用它的例子.谢谢.
Boo*_*Boo 20
最简单的方法是将键值对数组反序列化为IDictionary<string, string>:
public class SomeData
{
public string Id { get; set; }
public IEnumerable<IDictionary<string, string>> Data { get; set; }
}
private static void Main(string[] args)
{
var json = "{ \"id\": \"123\", \"data\": [ { \"key1\": \"val1\" }, { \"key2\" : \"val2\" } ] }";
var obj = JsonConvert.DeserializeObject<SomeData>(json);
}
但是如果你需要将它反序列化到你自己的类中,它可能看起来像这样:
public class SomeData2
{
public string Id { get; set; }
public List<SomeDataPair> Data { get; set; }
}
public class SomeDataPair
{
public string Key { get; set; }
public string Value { get; set; }
}
private static void Main(string[] args)
{
var json = "{ \"id\": \"123\", \"data\": [ { \"key1\": \"val1\" }, { \"key2\" : \"val2\" } ] }";
var rawObj = JObject.Parse(json);
var obj2 = new SomeData2
{
Id = (string)rawObj["id"],
Data = new List<SomeDataPair>()
};
foreach (var item in rawObj["data"])
{
foreach (var prop in item)
{
var property = prop as JProperty;
if (property != null)
{
obj2.Data.Add(new SomeDataPair() { Key = property.Name, Value = property.Value.ToString() });
}
}
}
}
看到我知道那Value是string和我调用ToString()方法,可以有另一个复杂的类.
| 归档时间: |
|
| 查看次数: |
31457 次 |
| 最近记录: |