Yan*_*eau 3 c# json json.net deserialization
当我发送对某个 API 的请求时,它们返回给我一个很棒的 json,但问题是,根据我提供的参数,对象名称总是不同,而数据结构保持不变。所以我尝试使用 Newtonsoft 库将 json 转换为 C# 类。我发现做到这一点的唯一方法是使用 JsonTextReader,但我想知道是否有更干净的方法来实现此目的,我查找了文档,但找不到任何可以在这方面帮助我的内容。我还尝试使用 JValue.Parse 进行动态对象映射,但由于属性名称总是不同,所以它对我没有帮助。这是一个代码示例来说明该问题:
{
"error": [],
"result": {
//This property name always changes
"changingPropertyName": [
[
"456.69900",
"0.03196000",
1461780019.8014,
]]
}
//C# mapping
public partial class Data
{
[JsonProperty("error")]
public object[] Error { get; set; }
[JsonProperty("result")]
public Result Result { get; set; }
}
public class Result
{
[JsonProperty("changingPropertyName")]
public object[][] changingPropertyName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
处理变量属性名称的一种方法是使用 aDictionary<string, T>代替强类型类(其中T是您尝试捕获的变量属性的类型)。例如:
public partial class Data
{
[JsonProperty("error")]
public object[] Error { get; set; }
[JsonProperty("result")]
public Dictionary<string, object[][]> Result { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以从字典中获取第一个KeyValuePair,并且您将获得变量属性的名称和可用的值。
string json = @"
{
""error"": [],
""result"": {
""changingPropertyName"": [
[
""456.69900"",
""0.03196000"",
1461780019.8014
]
]
}
}";
var data = JsonConvert.DeserializeObject<Data>(json);
KeyValuePair<string, object[][]> pair = data.Result.First();
Console.WriteLine(pair.Key + ":");
object[][] outerArray = pair.Value;
foreach (var innerArray in outerArray)
{
foreach (var item in innerArray)
{
Console.WriteLine(item);
}
}
Run Code Online (Sandbox Code Playgroud)
小提琴: https: //dotnetfiddle.net/rlNKgw