首页 > 解决方案 > 如何从复杂的 JSON 格式文件 C# 中获取特定信息

问题描述

我试图从一个复杂的 JSON 文件中获取所有“方法名”“全名”和属性 [] 值的列表,我试图实现一个基本模型来读取顶层,但所有内容都返回为 null;

public class TestRun
{
    public string @id { get; set; }
    public string @name { get; set; }
    public string @fullname { get; set; }
    public string testcasecount { get; set; }
    public TestSuite[] TestSuite { get; set; }
}

public class TestSuite
{

}

public class ScriptModel
{
    public TestRun[] TestRun { get; set; }

}

JSON看起来像这样;从根级别有大量嵌套的“test-suites”和“test-fixtures”

            "test-suite": {
                "@type": "TestSuite",
                "@id": "0-1030",
                "@name": "Example__Exampledll",
                "@fullname": "Example",
                "@runstate": "Runnable",
                "@testcasecount": "24",
                "test-suite": {
                    "@type": "TestSuite",
                    "@id": "0-1031",
                    "@name": "Features",
                    "@fullname": "Payments_Regression.Features",
                    "@runstate": "Runnable",
                    "@testcasecount": "24",
                    "test-suite": [
                        {
                            "@type": "TestSuite",
                            "@id": "0-1033",
                            "@name": "PRE",
                            "@fullname": "Payments_Regression.Features",
                            "@runstate": "Runnable",
                            "@testcasecount": "16",
                            "test-suite": [
                                {
                                    "@type": "TestFixture",
                                    "@id": "0-1015",
                                    "@name": "Outwards",
                                    "@fullname": "Example_Outwards",
                                    "@classname": "Example_Dll_Example_Outwards",
                                    "@runstate": "Runnable",
                                    "@testcasecount": "8",
                                    "properties": {
                                        "property": [
                                            {
                                                "@name": "Description",
                                                "@value": "Smoke"
                                            },
                                            {
                                                "@name": "Category",
                                                "@value": "PREPRODUCTION"
                                            },
                                            {
                                                "@name": "Category",
                                                "@value": "Payment"
                                            }
                                        ]
                                    },
                                    "test-case": [
                                        {
                                            "@id": "0-1017",
                                            "@name": "TestCaseNameIWantToCapture",
                                            "@fullname": "fullnameexample",
                                            "@methodname": "MethodNameToCapture",
                                            "@classname": "ClassNametoCapture",
                                            "@runstate": "Runnable",
                                            "@seed": "1767458888",
                                            "properties": {
                                                "property": {
                                                    "@name": "Description",
                                                    "@value": "PropertyValueiWouldLikeToCapture."
                                                }
                                            }
                                        },

标签: c#jsonobjectmodel

解决方案


您使用特殊符号@它不会更改变量名称,此符号有时用于使用变量名称等关键字var @object = "sample"

你需要使用JsonProperty属性

public class TestRun
{
    [JsonProperty("@id")]
    public string Id { get; set; }

    [JsonProperty("@name")]
    public string Name { get; set; }

    [JsonProperty("@fullname")]
    public string FullName { get; set; }

    [JsonProperty("@testcasecount")]
    public string TestCaseCount { get; set; }

    [JsonProperty("test-suite")]
    public TestSuite[] TestSuite { get; set; }
}

推荐阅读