【问题标题】:Cant access a property in a returned JSON object无法访问返回的 JSON 对象中的属性
【发布时间】:2017-03-27 08:05:33
【问题描述】:

这个 json 对我来说真的很奇怪,我无法访问其中的属性(StudentIdCourseId)。我不是设计它的人。

如何使用 C# 正确访问它们?

{
  "Result": [
    "Done",
    {
      "StudentId": 45,
      "CourseId": 27
    }
  ]
}

我也尝试检查json2csharp,但我得到了这个结果:

public class RootObject
{
    public List<object> Result { get; set; }
}

【问题讨论】:

  • 这是标准的 JSON,没什么异常
  • 有点题外话:恕我直言,这是一个丑陋的 JSON 对象。 Result 是一个对象数组,可以是对象或字符串(或者 idk 可能是其他东西)。 Result 并不能表示清楚的东西,如果它是具有Status = DoneData = { StudentId: ..., CourseId: ... } 的对象数组会更好。但是,它仍然有效且可反序列化
  • @mast3rd3mon 我明白了,谢谢。我怎样才能访问它们?
  • @YeldarKurmangaliyev 这根本不是糟糕的 JSON?
  • @ipid 不太清楚,因为我不太懂 C#,抱歉

标签: c# json


【解决方案1】:

您可以将列表项定义为dynamic:

 public class RootObject
 {
     public List<dynamic> Result { get; set; }
 }

然后直接访问所需的属性。但在这种情况下,您必须自己检查它们是否存在(例如使用try...catch):

var json = @"{
    ""Result"": [
    ""Done"",
    {
        ""StudentId"": 45,
        ""CourseId"": 27
    }
    ]
}";

var rootObject = JsonConvert.DeserializeObject<RootObject>(json);

foreach (var res in rootObject.Result)
    if (res is string)
        Console.WriteLine(rootObject.Result[0]);
    else
        try
        { 
            Console.WriteLine(res.StudentId);
        }
        catch
        {
            // Unexpected element type
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2011-11-05
    相关资源
    最近更新 更多