ASP.NET Core中SQL资源文件返回字节数组,如何恢复为字符串读取?
解决ASP.NET Core资源中SQL文件从字节数组转回字符串读取的问题
方法1:手动转换字节数组为字符串
如果当前资源文件生成的代码返回字节数组,直接在调用时将其转成字符串即可,注意匹配SQL文件的实际编码(通常用UTF-8):
// 获取字节数组 byte[] sqlBytes = (byte[])Pg.ResourceManager.GetObject("YourSqlResourceKey"); // 转换为字符串 string sqlContent = Encoding.UTF8.GetString(sqlBytes);
怕每次转换麻烦的话,可以自己写个partial类封装(别直接改自动生成的Pg.Designer.cs,会被覆盖):
// 新建Pg.cs文件,和Pg.Designer.cs同命名空间 public partial class Pg { public static string GetSqlContent(string resourceKey) { var bytes = ResourceManager.GetObject(resourceKey) as byte[]; return bytes != null ? Encoding.UTF8.GetString(bytes) : string.Empty; } } // 调用时直接用 string sql = Pg.GetSqlContent("YourSqlResourceKey");
方法2:修改资源配置让生成器自动返回字符串
直接调整.resx文件的资源项设置,让自动生成的代码回到用GetString的逻辑:
- 打开
Pg.resx文件,找到对应的SQL资源项。 - 在右侧属性面板里,把类型从
System.Byte[]改成System.String,同时确认编码设置正确(比如UTF-8)。 - 保存.resx文件,重新生成项目,
Pg.Designer.cs里的对应代码就会自动换成ResourceManager.GetString,直接返回字符串。
如果是刚添加SQL文件到资源,添加时注意:
- 在.resx编辑器点「添加资源」→「添加现有文件」,选中SQL文件后,立刻在属性面板把类型设为
System.String,避免被识别为二进制资源。
方法3:直接修改.resx的XML内容(兜底方案)
如果可视化编辑器的设置不生效,直接打开.resx的XML视图调整:
找到对应资源的<data>节点,把带二进制引用的格式:
<data name="YourSqlResourceKey" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>YourSqlFile.sql;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data>
改成直接存储文本的格式:
<data name="YourSqlResourceKey" xml:space="preserve"> <value>-- 这里是你的SQL语句内容 SELECT * FROM YourTable; </value> </data>
保存后重新生成项目,Designer文件就会生成返回字符串的代码。
内容的提问来源于stack exchange,提问作者Chhim Kakada
相关产品推荐
相关产品推荐

