C# 在RESX文件中存储数据集
我对C#/.Net文件中的资源非常陌生 我需要在一个资源文件(C# 在RESX文件中存储数据集,c#,.net,resources,resx,C#,.net,Resources,Resx,我对C#/.Net文件中的资源非常陌生 我需要在一个资源文件(*.RESX)中存储一个操作数据表,但我不知道怎么做 如果我用C语言进行硬编码,我会这样做: struct { int inputA; int outputB; } dataPoint; dataPoint myOpsData[] = { { 0, 2000}, {10, 4000}, {20, 6300},
*.RESX
)中存储一个操作数据表,但我不知道怎么做
如果我用C语言进行硬编码,我会这样做:
struct {
int inputA;
int outputB;
} dataPoint;
dataPoint myOpsData[] = { { 0, 2000},
{10, 4000},
{20, 6300},
{30, 8400},
{40, 10620} };
VisualStudio2010编辑器中最简单的方法是使用字符串,但这只是将字符串映射到值。如果我这样做,我的数据集将类似于:
Name: Value:
----- ------
PerfData1 { 0, 2000}
PerfData2 {10, 4000}
PerfData3 {20, 6300}
PerfData4 {30, 8400}
PerfData5 {40, 10620}
但是这种格式需要大量的解析、相关的验证和错误处理,而这些似乎是不必要的
如何在.RESX资源文件中表示数据点数组(或更复杂的数据类型)?您最好使用app.config文件。您可以使用AppSettings部分添加字符串,显然您需要对其进行解析(与您尝试使用.RESX执行的操作类似)。但是,app.config文件允许您创建自定义XML节,以便更好地满足您的需求。使用配置文件最好的部分是能够更改配置数据,而无需实际重建应用程序 此外,请查看以下线程,但您将使用数据点代替页面:
您最好使用app.config文件。您可以使用AppSettings部分添加字符串,显然您需要对其进行解析(与您尝试使用.RESX执行的操作类似)。但是,app.config文件允许您创建自定义XML节,以便更好地满足您的需求。使用配置文件最好的部分是能够更改配置数据,而无需实际重建应用程序 此外,请查看以下线程,但您将使用数据点代替页面:
您不必使用ResX在程序集中嵌入一些静态数据 使用Visual Studio,您只需添加文件(添加新项或添加现有项),将生成操作(F4或属性窗口)更改为“嵌入式资源”,然后可以使用如下代码加载它(注意:应位于同一程序集中以避免安全问题): 我假设这里的文件是MyFile.MyExt,该文件直接添加到项目根目录中,因为VS会自动将当前项目名称空间(此处为ConsoleApplication1)添加到嵌入式资源路径中 如果您不确定此路径,我建议您使用诸如.NET reflector之类的工具,该工具能够显示程序集中的嵌入式资源名称和数据
这将为您获得一个流实例。因此,只要可以从流实例(MemoryStream、StreamReader、数据集、.NET或Xml序列化对象、位图等)加载/保存数据,就可以存储任何类型的数据。您不必使用ResX在程序集中嵌入一些静态数据 使用Visual Studio,您只需添加文件(添加新项或添加现有项),将生成操作(F4或属性窗口)更改为“嵌入式资源”,然后可以使用如下代码加载它(注意:应位于同一程序集中以避免安全问题): 我假设这里的文件是MyFile.MyExt,该文件直接添加到项目根目录中,因为VS会自动将当前项目名称空间(此处为ConsoleApplication1)添加到嵌入式资源路径中 如果您不确定此路径,我建议您使用诸如.NET reflector之类的工具,该工具能够显示程序集中的嵌入式资源名称和数据
这将为您获得一个流实例。因此,您可以存储任何类型的数据,前提是您可以将其从/保存到流实例(MemoryStream、StreamReader、DataSet、.NET或Xml序列化对象、位图等)是否有特定的原因需要使用资源文件来实现此目的?看起来这不适合你想要完成的任务。@e36M3:很好。我希望不时更改资源中的数据,并简单地重新构建程序集,将新数据合并到程序中。我想把这个传给一个非技术人员,所以要求他们更新数据库,或者在源代码中编辑硬编码表似乎不太实际。如果你有一个很好的选择,我一定会考虑它。你为什么要为此使用一个资源文件?看起来这不适合你想要完成的任务。@e36M3:很好。我希望不时更改资源中的数据,并简单地重新构建程序集,将新数据合并到程序中。我想把这个传给一个非技术人员,所以要求他们更新数据库,或者在源代码中编辑硬编码表似乎不太实际。如果你有一个好的选择,我一定会考虑它。谢谢,这使我走上了正确的轨道。我在我的项目中包含了一个JSON文本文件,并制作了一个DataContractJsonSerializer从中读取。谢谢,这让我走上了正确的道路。我在我的项目中包含了一个JSON文本文件,并制作了一个DataContractJsonSerializer从中读取。
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ConsoleApplication1.MyFile.MyExt"))
{
// load data from stream
}