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