在 C# 测试中从 Json 文件中读取和映射数据

mar*_* pb 6 c# selenium json nunit data-driven-tests

我试图在自动化测试中使用来自 JSON 文件的数据。因为我找到了如何使用它,感谢@jeroenh,我以正确的方式离开了这里。我希望,它会对某人有所帮助。

-- JSON 文件 (testDataCo.Json):

{
  "DataCo": [
    {        
      "url": "https://dodo.com",
      "user": "test@test.com",
      "password": "uawe",       
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

-- 将数据确定为 JSON 文件的类

sing System.Globalization;
using Newtonsoft.Json.Converters;
using System.IO;
using Newtonsoft.Json;

namespace DataFromJson
{ 

    public partial class DataJson
    {
        [JsonProperty("DataCo")]
        public DataCo[] DataCo { get; set; }
    }

    public partial class DataCo
    {       
        [JsonProperty("url")]
        public string Url { get; set; }   

        [JsonProperty("user")]
        public string User { get; set; }

        [JsonProperty("password")]
        public string Password { get; set; }      
    }

    public partial class DataJson
    {
        public static DataJson FromJson(string json) => JsonConvert.DeserializeObject<DataJson>(json, DataFromJson.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this DataJson self) => JsonConvert.SerializeObject(self, DataFromJson.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters = {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

-- 在这里你可以在变量中使用来自 JSON 的数据

public class UseJsonInVar
    {
       string filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../testDataCo.json"); 
       StreamReader ddd = new StreamReader(filepath);
       var json = ddd.ReadToEnd();
       DataJson objectJson = JsonConvert.DeserializeObject<DataJson>(json);

       url = objectJson.DataCo[0].Url;
       user = objectJson.DataCo[0].User;
       pass = objectJson.DataCo[0].Password;
    }
Run Code Online (Sandbox Code Playgroud)

Ale*_*ijk 3

您正在将文件的内容读入变量中json,但之后您的代码似乎没有对其执行任何操作。创建了的实例JsonData,但实际的 JSON 数据从未传递给它。

您需要一个库来将 JSON 数据反序列化为对象。您已经在使用Json.NET,这是一个很好的选择。通过项目引用中的库,您可以执行以下操作:

JsonData obj = JsonConvert.DeserializeObject<JsonData>(json);
string plant = obj.plant; // "plant goco"
Run Code Online (Sandbox Code Playgroud)