我试图在自动化测试中使用JSON文件中的数据。因为我找到了使用它的方法,所以感谢@jeroenh,我以正确的方式离开了这里。希望对别人有帮助。
-JSON文件(testDataCo.Json):
{
"DataCo": [
{
"url": "https://dodo.com",
"user": "test@test.com",
"password": "uawe",
}
]
}
-具有对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 }
},
};
}
}
-在这里您可以在变量中使用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;
}
答案 0 :(得分:1)
您正在将文件的内容读取到变量json
中,但是此后,您的代码似乎并没有执行任何操作。已创建JsonData
的实例,但实际的JSON数据从未传递给它。
您将需要一个库来将JSON数据反序列化为对象。您已经在使用Json.NET这是一个很好的选择。使用项目参考中的库,您可以执行以下操作:
JsonData obj = JsonConvert.DeserializeObject<JsonData>(json);
string plant = obj.plant; // "plant goco"
答案 1 :(得分:1)
您的课程有一个根对象,“ Dataco”字段是一个数组。
您可以使用“编辑-选择性粘贴-将Json作为类粘贴”功能在Visual Studio中轻松将json转换为正确的类。另一种可能性是使用在线json-to-c#转换器,例如https://app.quicktype.io/#l=cs
public partial class RootData
{
[JsonProperty("DataCo")]
public DataCo[] DataCo { get; set; }
}
public partial class DataCo
{
[JsonProperty("discount")]
public long Discount { get; set; }
[JsonProperty("quote name")]
public string QuoteName { get; set; }
[JsonProperty("base price")]
public long BasePrice { get; set; }
[JsonProperty("product description")]
public string ProductDescription { get; set; }
[JsonProperty("plant")]
public string Plant { get; set; }
[JsonProperty("url")]
public string Url { get; set; }
[JsonProperty("final price")]
public long FinalPrice { get; set; }
[JsonProperty("password")]
public string Password { get; set; }
[JsonProperty("quote id")]
public string QuoteId { get; set; }
[JsonProperty("freight")]
public string Freight { get; set; }
[JsonProperty("billing price")]
public long BillingPrice { get; set; }
[JsonProperty("quantity")]
public long Quantity { get; set; }
[JsonProperty("proposed price")]
public long ProposedPrice { get; set; }
[JsonProperty("user")]
public string User { get; set; }
[JsonProperty("product id")]
public long ProductId { get; set; }
}
鉴于此类,您可以使用Newtonsoft JSON.Net
反序列化json文本:
JsonConvert.DeserializeObject<RootData>(json);
答案 2 :(得分:0)
如果您可以嵌入json文件,请考虑使用软件包JsonSectionReader
此软件包为json中的数据提供了单元测试的出色支持。