2015-08-07 6 views
7

मैंने अभी एएसपी.NET 5 स्थापित किया है और विजुअल स्टूडियो में कंसोल एप्लिकेशन बनाया है। मैंने प्रोजेक्ट के रूट फ़ोल्डर में एक फ़ाइल, config.json जोड़ा है।कंसोल अनुप्रयोग में config.json से मानों को कैसे पढ़ा जाए

यह इस तरह दिखता है:

{ 
"Data": { 
    "TargetFolderLocations": { 
     "TestFolder1": "Some path", 
     "TestFolder2": "Another path" 
    } 
} 

}

मेरे Program.cs इस

मैं कोड के साथ TargetFolderLocations कुंजी का उपयोग कर सकते कैसे की तरह दिखता है?

+0

क्या यह 'Data.TargetFolderLocations' है? – Hogan

+0

के साथ काम नहीं करता है .TargetFolderLocations या तो दुर्भाग्य से ... – JOSEFtw

+0

मैंने इसे हल करने में कामयाब रहा है, कृपया मेरा जवाब देखें :) – JOSEFtw

उत्तर

3

निम्नलिखित की तरह एक प्रकार है । उदाहरण:

var folderSettings = ConfigurationBinder.Bind<FolderSettings>(config.GetConfigurationSection("Data")); 
var path = folderSettings.TargetFolderLocations["TestFolder1"]; 
+0

यह वास्तव में साफ है, मैंने इसे पहले टाइप करने के लिए बाध्य किया था, लेकिन मुझे लगता है कि वाक्यविन्यास बदल गया है और मुझे कोई दस्तावेज नहीं मिला ... यह कोशिश करेगा और इसे सही जवाब के रूप में स्वीकार करेगा अगर यह काम करता है! – JOSEFtw

0

आप जावास्क्रिप्ट को ज़र्सन में पार्स करने के लिए जावास्क्रिप्टसेरियलाइज़र (नेमस्पेस: सिस्टम.Web.Extension) का उपयोग कर सकते हैं और जेसन से इसकी कुंजी के आधार पर कोई भी मूल्य ढूंढ सकते हैं। आप कोड बन जाएगा:

string json = System.IO.File.ReadAllText("PathToJsonFile"); 
JavaScriptSerializer serializer = new JavaScriptSerializer(); 
Dictionary<string, object> dic = serializer.Deserialize<Dictionary<string, object>>(json); 

आप शब्दकोश से अधिक पुनरावृति हैं, तो आप सभी कुंजियों को देखते हैं और डीआईसी का उपयोग कर अपने मूल्यों को प्राप्त कर सकते हैं।

* बस एक वैकल्पिक समाधान *

2

जिस तरह से आप अपने प्रश्न शब्दों के बाद, अपना config.json फ़ाइल परियोजना की जड़ में है, लेकिन आप रनटाइम पर निष्पादन योग्य निर्देशिका में देख रहे हैं। मान लें कि आप इसे विजुअल स्टूडियो से कर रहे हैं, और यह मानते हुए कि आप बिल्ड समय पर कॉन्फ़िगरेशन फ़ाइल की प्रतिलिपि नहीं बना रहे हैं, Environment.CurrentDirectory शायद bin\Debug है, और फ़ाइल वहां नहीं है।

फ़ाइल को वहां सुनिश्चित करने के लिए आप समाधान एक्सप्लोरर से config.jsonCopy always पर गुण सेट कर सकते हैं।

+2

यह अब मामला नहीं है। वीएस 2015 में .NET कोर 1.0 टूल्स के साथ स्थापित करने के लिए अब आपके पास यह विकल्प नहीं है। इसके बजाय, इसे project.json में "buildOptions" के अंदर जोड़ें: "copyToOutput": [ "config.json" ] – ScottRFrost

+0

@ScottRFrost धन्यवाद। अंत में मेरा कंसोल एप्लिकेशन चल रहा है। –

2

मैं इस तरह से इसे हल करने में कामयाब रहे है:

public class FolderSettings 
{ 
    public Dictionary<string, string> TargetFolderLocations { get; set; } 
} 

फिर आप ऊपर दिए तरह प्रकार के ConfigurationBinder उपयोग कर सकते हैं स्वचालित रूप से विन्यास वर्गों बाध्य करने के लिए:

public class Program 
{ 
    public IConfiguration Configuration { get; set; } 
    public Dictionary<string,string> Paths { get; set; } 
    public Program(IApplicationEnvironment app, 
      IRuntimeEnvironment runtime, 
      IRuntimeOptions options) 
    { 
     Configuration = new ConfigurationBuilder() 
      .AddJsonFile(Path.Combine(app.ApplicationBasePath, "config.json")) 
      .AddEnvironmentVariables() 
      .Build(); 
    } 

    public void Main(string[] args) 
    { 
     var pathKeys = Configuration.GetConfigurationSections("TargetFolderLocations"); 
     foreach (var pathItem in pathKeys) 
     { 
      var tmp = Configuration.Get($"TargetFolderLocations:{pathItem.Key}"); 
      Paths.Add(pathItem.Key, tmp); 
     } 

     return; 
    } 
+1

धन्यवाद JOSEFtw। आपको अपने "पथ" शब्दकोश परिवर्तनीय को प्रारंभ करने की आवश्यकता है अन्यथा आपको एक पूर्ण अपवाद मिलेगा। – Kwex

संबंधित मुद्दे