将XML opener(reader)更改为JSON

时间:2017-01-11 13:11:59

标签: c# json xml

我遵循了一个很好的教程,展示了如何在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

干杯

1 个答案:

答案 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辅助类,但在我看来,您对代码的控制力度较低问题将是。