Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows 10应用程序-来自JSON的组合框_C#_Xaml_Data Binding_Combobox - Fatal编程技术网

C# Windows 10应用程序-来自JSON的组合框

C# Windows 10应用程序-来自JSON的组合框,c#,xaml,data-binding,combobox,C#,Xaml,Data Binding,Combobox,因此,我尝试创建我的第一个Windows应用程序,但它并没有像预期的那样运行。。 甚至不确定存储数据的最佳方式是什么,目前我使用的是JSON,但我也可以使用YAML,甚至可以直接将其存储在组合框中 所以我有一个组合框: <TextBlock Text="Select Currency:" TextWrapping="Wrap" VerticalAlignment="Center" Grid.Row="2" Grid.Column="1" Margin="5,0,0,0" Foregro

因此,我尝试创建我的第一个Windows应用程序,但它并没有像预期的那样运行。。 甚至不确定存储数据的最佳方式是什么,目前我使用的是JSON,但我也可以使用YAML,甚至可以直接将其存储在组合框中

所以我有一个组合框:

  <TextBlock Text="Select Currency:" TextWrapping="Wrap" VerticalAlignment="Center" Grid.Row="2" Grid.Column="1" Margin="5,0,0,0" Foreground="White"/>
    <ComboBox x:Name="cbCurrency" VerticalAlignment="Center" HorizontalAlignment="Stretch" Grid.Row="2" Grid.Column="2" Margin="0,0,15,0" Foreground="White" Background="#6649586D" BorderBrush="#660B121D" SelectionChanged="Currency_SelectionChanged"/>
组合框应采用每个属性(CAD、USD等)中的“名称”对象 我四处查看了一下,但找不到关于JSON/YAML而不是DB或本地存储在Combobox中的一些有效解释。如果有人能帮我用JSON值填充这个组合框,或者告诉我是否有更好的方法来实现我的尝试,我会很高兴吗


好的,克林特,再次感谢你,终于根据你的输出使它在Windows10UWP上工作了。它给出了下面的代码,修复了我在System.IO.FileSystem.dll中的注释“System.InvalidoOperationException”中提到的错误。奇怪的是,我不得不将我的.json重命名为.txt才能工作

    public class Currency
    {
        public string Name { get; set; }
        public string Symbol_Native { get; set; }
        public int Decimal_Digits { get; set; }
        public string Code { get; set; }
    }

    public async void ParseCurrencies()
    {
        string fileName = "Currencies.txt";
        StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(@"ms-appx:///Assets/" + fileName));
        var json = await Windows.Storage.FileIO.ReadTextAsync(file);
        var dict = JsonConvert.DeserializeObject<Dictionary<string, Currency>>(json);
        foreach (var keyValuePair in dict)
        {
            cbCurrency.ItemsSource = dict.Values;
            ///System.Diagnostics.Debug.WriteLine("Currency: {0}", keyValuePair.Key);
            ///System.Diagnostics.Debug.WriteLine("\tName: {0}", keyValuePair.Value.Name);
            ///System.Diagnostics.Debug.WriteLine("\tSymbol_Native: {0}", keyValuePair.Value.Symbol_Native);
            ///System.Diagnostics.Debug.WriteLine("\tDecimal Digits: {0}", keyValuePair.Value.Decimal_Digits);
            ///System.Diagnostics.Debug.WriteLine("\tCode: {0}", keyValuePair.Value.Code);
        }
    }

    public MainPage()
    {
        this.InitializeComponent();
        ParseCurrencies();
    }
公共类货币
{
公共字符串名称{get;set;}
公共字符串符号\u本机{get;set;}
公共整数十进制数字{get;set;}
公共字符串代码{get;set;}
}
公共异步无效解析货币()
{
字符串fileName=“currences.txt”;
StorageFile文件=等待StorageFile.GetFileFromApplicationUrisync(新Uri)(@“ms-appx:///Assets/“+文件名”);
var json=wait Windows.Storage.FileIO.ReadTextAsync(文件);
var dict=JsonConvert.DeserializeObject(json);
foreach(dict中的var keyValuePair)
{
cbCurrency.ItemsSource=默认值;
///System.Diagnostics.Debug.WriteLine(“Currency:{0}”,keyValuePair.Key);
///System.Diagnostics.Debug.WriteLine(“\t名称:{0}”,keyValuePair.Value.Name);
///System.Diagnostics.Debug.WriteLine(“\tSymbol_Native:{0}”,keyValuePair.Value.Symbol_Native);
///System.Diagnostics.Debug.WriteLine(“\t小数位数:{0}”,keyValuePair.Value.Decimal_位数);
///System.Diagnostics.Debug.WriteLine(“\t代码:{0}”,keyValuePair.Value.Code);
}
}
公共主页()
{
this.InitializeComponent();
解析货币();
}

您可以使用

以下代码演示了从JSON中获取数据的基础知识:

class Currency
{
    public string Name { get; set; }
    public string Symbol_Native { get; set; }
    public int Decimal_Digits { get; set; }
    public string Code { get; set;}
}

void Main()
{
    var json = File.ReadAllText(@"C:\users\clint\desktop\common-currency.json");
    var dict = JsonConvert.DeserializeObject<Dictionary<string, Currency>>(json);
    foreach (var keyValuePair in dict)
    {
        Console.WriteLine("Currency: {0}", keyValuePair.Key);
        Console.WriteLine("\tName: {0}", keyValuePair.Value.Name);
        Console.WriteLine("\tSymbol_Native: {0}", keyValuePair.Value.Symbol_Native);
        Console.WriteLine("\tDecimal Digits: {0}", keyValuePair.Value.Decimal_Digits);
        Console.WriteLine("\tCode: {0}", keyValuePair.Value.Code);
        Console.WriteLine();
    }
}
=>


^这将演示您需要的基本结构。

您可以使用

以下代码演示了从JSON中获取数据的基础知识:

class Currency
{
    public string Name { get; set; }
    public string Symbol_Native { get; set; }
    public int Decimal_Digits { get; set; }
    public string Code { get; set;}
}

void Main()
{
    var json = File.ReadAllText(@"C:\users\clint\desktop\common-currency.json");
    var dict = JsonConvert.DeserializeObject<Dictionary<string, Currency>>(json);
    foreach (var keyValuePair in dict)
    {
        Console.WriteLine("Currency: {0}", keyValuePair.Key);
        Console.WriteLine("\tName: {0}", keyValuePair.Value.Name);
        Console.WriteLine("\tSymbol_Native: {0}", keyValuePair.Value.Symbol_Native);
        Console.WriteLine("\tDecimal Digits: {0}", keyValuePair.Value.Decimal_Digits);
        Console.WriteLine("\tCode: {0}", keyValuePair.Value.Code);
        Console.WriteLine();
    }
}
=>



^这应该说明你需要的基本结构。

你到底想做什么,因为你的问题很不清楚。您正在尝试读取数据并在组合框中显示它吗?你是否正在尝试解决如何存储数据?嘿,谢谢Clint,最初的问题是在combobox中获取JSON数据,因此读取数据并在combobox中显示(这是主要目标)-但是我对主题搜索越多,我就越怀疑是否将其存储在JSON文件中。它是什么数据?有多少钱?这只是一个货币列表,还是还有其他数据?这是一个很大的货币列表-JSON实际上在对我来说很重要的对象上是名称-符号-本机-十进制数字和代码。你到底想做什么,就目前而言,你的问题很不清楚。您正在尝试读取数据并在组合框中显示它吗?你是否正在尝试解决如何存储数据?嘿,谢谢Clint,最初的问题是在combobox中获取JSON数据,因此读取数据并在combobox中显示(这是主要目标)-但是我对主题搜索越多,我就越怀疑是否将其存储在JSON文件中。它是什么数据?有多少钱?这只是一个货币列表,还是还有其他数据?这是一个很大的货币列表-JSON实际上位于对我来说很重要的对象上,它们是名称-符号-本机-十进制数字和代码。非常感谢Clint,所以我继续编辑它,尝试创建这个绑定,但是无论我尝试什么,返回的值都不会填充组合框:
foreach(dict中的var-keyValuePair){cbCurrency.ItemsSource=dict;}
其中我的组合框有:x:Name=“cbCurrency”ItemsSource=“{binding Currency}”displaymberpath=“Name”SelectedValuePath=“名字“你搞定了,克林特!非常感谢。还发现了在我的尝试中无法读取JSON的原因:抛出异常:System.IO.FileSystem.dll中的“System.InvalidOperationException”抛出异常:System.Private.CoreLib.ni.dll中的“System.IO.FileLoadException”抛出异常:System.Private.CoreLib.ni.dll中的“System.IO.FileLoadException”:抛出异常:app.exe中的'System.invalidoOperationException',看起来我不是唯一的一个:非常感谢Clint,所以我继续编辑它,尝试创建这个绑定,但无论我尝试什么,返回的值都不会填充组合框:
foreach(dict中的var keyValuePair){cbCurrency.ItemsSource=dict;}
我的组合框中有:x:Name=“cbCurrency”ItemsSource=“{Binding Currency}”DisplayMemberPath=“Name”SelectedValuePath=“Name”你搞定了!非常感谢。还发现了在我的尝试中无法读取JSON的原因:抛出异常:System.IO.FileSystem.dll中的“System.InvalidOperationException”抛出异常:System.Private.CoreLib.ni.dll中的“System.IO.FileLoadException”抛出异常:System.Private.CoreLib.ni.dll中的“System.IO.FileLoadException”:抛出异常:app.exe中的“System.invalidoOperationException”,看起来我不是唯一一个:
cbCurrency.ItemsSource = dict.Values;
<ComboBox x:Name="cbCurrency">
   <ComboBox.ItemTemplate>
     <DataTemplate>
       <StackPanel Orientation="Vertical">
         <TextBlock Text="{Binding Name, Mode=OneWay}" />
         <TextBlock Text="{Binding Symbol_Native, Mode=OneWay}" />
         <TextBlock Text="{Binding Decimal_Digits, Mode=OneWay}" />
         <TextBlock Text="{Binding Code, Mode=OneWay}" />
       </StackPanel>
     </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>