C# - 从JSON文件中读取

时间:2016-02-27 21:22:24

标签: c# visual-studio win-universal-app

我在阅读JSON文件时遇到问题。将文件插入到解决方案资源管理器中,并将“构建操作”设置为“内容”并将“复制属性我希望该文件应该可以从LocalFolder中的应用程序访问。

Stream localFolder = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("sources.json");

string json;

using (StreamReader streamReader = new StreamReader(localFolder))
{
    json = streamReader.ReadToEnd();
}

return JsonConvert.DeserializeObject<List<SourceDefinition>>(json);

它返回的错误是:

  

错误:系统找不到指定的文件。 (例外   HRESULT:0x80070002)

3 个答案:

答案 0 :(得分:1)

尝试File.OpenRead - 您可能会尝试从AppData打开,这是thr userprofile中的一个特殊路径(在这种情况下为%localappdata%)

答案 1 :(得分:1)

因此ApplicationData.Current.LocalFolder指向users \ XXXXX \ Local \ Packages \ YYYYYY \ LocalState,其中XXXX是用户,YYYY是应用程序的GUID。据我所知,项目资源管理器中没有文件夹实际指向该位置。您可以尝试使用Windows.ApplicationModel.Package.Current。 InstalledLocation.Path将使您可以访问运行应用程序的bin。希望这会有所帮助。

答案 2 :(得分:0)

试试这个代码,以可扩展的方式读取 json 文件并绑定到列表模型类

appsettings.json File

    "Mapping": {
        "Column1": {
          "ExcelColumnName": "DISTRIBUTOR UNIQUE ID",
          "DbFieldName": "vehicle_dealer_code",
          "IsRequired": "true",
          "DataType": ""
        },
        "Column1": {
          "ExcelColumnName": "FACTORY ORDER NUMBER",
          "DbFieldName": "vehicle_data02",
          "IsRequired": "true",
          "DataType": ""
        }
    public static T InitOptions<T>(string name, string section) where T : new()
            {
                var config = new ConfigurationBuilder()
                 .SetBasePath(AppContext.BaseDirectory)
                 .AddJsonFile(name, true, true)
                 .Build();
                return config.GetSection(section).Get<T>();
            }

   

    public class Config
        {
            public Mapping Column1 { get; set; }
            public Mapping Column2 { get; set; }        
        }

public class Mapping
{
    public string ExcelColumnName { get; set; }
    public string DbFieldName { get; set; }
    public bool IsRequired { get; set; }
    public string DataType { get; set; }
}

var MappedData = InitOptions<Config>("appsettings.json", "Mapping");