反序列化newtonsoft属性的动态对象名称



当我发送对某个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; }
}

处理变量属性名称的一种方法是使用Dictionary<string, T>代替强类型类(其中T是您试图捕获的变量属性的类型)。例如:

public partial class Data
{
    [JsonProperty("error")]
    public object[] Error { get; set; }
    [JsonProperty("result")]
    public Dictionary<string, object[][]> Result { get; set; }
}

然后,您可以从字典中获得第一个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);
    }
}

Fiddle:https://dotnetfiddle.net/rlNKgw

您可以使用将其反序列化为c#动态

dynamic dynamicObj= JsonConvert.DeserializeObject<dynamic>(jsonResultString);

相关内容

  • 没有找到相关文章

最新更新