2017-01-11 3 views
0

Я внимательно изучил, как сделать автоматизацию в C# Selenium. Файл конфигурации находится в XML на данный момент, но я хотел немного попрактиковаться и изменить его на .json-файл.Измените 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

Я думаю, что следующий ответ о JSON.NET может указывать на правильное решение: http://stackoverflow.com/a/17788118/3531995 Вы можете передать поток в библиотеку JSON.NET, но вы также необходимо обновить строку '' 'aut = navigator.SelectSingleNode (« AutoFramework/RunSettings/AUT »);' '' потому что это специфично для XML. – thomasvdb

+0

@thomasvdb Будет читать! tnx – Dymond

ответ

1

Я бы рекомендовал использовать Newtonsoft.Json, который доступен из NuGet. Для «повторного использования» ваш текущий код, который вы должны сделать некоторые основные 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 вспомогательный класс, который я сделал, но на мой взгляд, тем меньше у вас контроля над кодом более крупные проблемы будет.

+0

Спасибо! и спасибо за хорошее объяснение. Я проверю это непосредственно – Dymond

Смежные вопросы