我遵循了一个很好的教程,展示了如何在C#Selenium中创建自动化框架。 配置文件目前是XML格式,但我想要更多练习并将其更改为.json文件。
目前我们正在使用命名空间System.Xml.XPath;我的问题是,JSON有类似的东西吗?让我们说“System.Json;”与我的XML阅读器的工作原理相同。所以我不需要重构很多代码,或者它是不可避免的?
这就是它目前的工作方式。
//Initialize
ConfigReader.SetFrameworkSettings();
public class ConfigReader
{
public static void SetFrameworkSettings()
{
XPathItem aut;
string strFilename = Environment.CurrentDirectory.ToString() + "\\Config\\GlobalConfig.xml";
FileStream stream = new FileStream(strFilename, FileMode.Open);
XPathDocument document = new XPathDocument(stream);
XPathNavigator navigator = document.CreateNavigator();
//Get XML Details and pass it in XPathItem type variables
aut = navigator.SelectSingleNode("AutoFramework/RunSettings/AUT");
Settings.AUT = aut.Value.ToString();
}
}
public class Settings
{
public static string AUT { get; set; }
}
如果您可以更改这两行
,那会很棒XPathDocument document = new XPathDocument(stream);
XPathNavigator navigator = document.CreateNavigator()
XpathItem
干杯
答案 0 :(得分:1)
我建议使用Nuget提供的Newtonsoft.Json
。
要重用"您当前的代码必须首先制作一些基本的SettingsConverter
:
public static class SettingsConverter
{
public static string FromXmlToJson(string xml)
{
Settings settings = null;
// read your xml file and assign values to the settings object
// now you can "serialize" settings object into Json
return JsonSerialization.Serialize(settings);
}
public static string FromJsonToXml(string json)
{
Settings settings = JsonSerialization.Deserialize<MeSettings>(json);
// save settings using your "xml" serialization
return xmlString; // return xml string
}
}
要使用这些方法,请使用此JsonSerialization
辅助类:
public static class JsonSerialiation
{
public static string Serialize<T>(T obj)
{
using (MemoryStream stream = new MemoryStream())
{
using (JsonTextWriter writer = new JsonTextWriter(new StreamWriter(stream))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serializer(writer, obj);
writer.Flush();
stream.Position = 0;
using (StreamReader reader = new StreamREader(stream))
{
return reader.ReadToEnd();
}
}
}
}
public static T Deserialize<T>(string jsonString)
{
using (JsonTextReader reader = new JsonTextReader(new StringReader(str)))
{
JsonSerializer serializer = new JsonSerializer();
return serializer.Deserialize<T>(reader)
}
}
}
以上示例要求您从静态更改Settings
类:
public class Settings
{
public static string AUT { get; set; }
}
例如:
public class Settings
{
public string AUT { get; set; }
}
如果您希望将其保持为静态。您应该使用JObject
库中的Newtonsoft.Json
:
JObject obj = JObject.Parse(jsonString);
Settings.AUT = obj.SelectToken("AUT").Value<string>();
您始终可以使用JsonConvert.Serialize<T>()
和JsonConvert.Deserialize<T>()
方法代替我已制作的JsonSerialization
辅助类,但在我看来,您对代码的控制力度较低问题将是。