C# 如何将流数据转换为对象?

C# 如何将流数据转换为对象?,c#,dll,methods,stream,C#,Dll,Methods,Stream,我有一个dll,其中存储图像资源,字体资源等 我在程序集中有一个类,它有一个返回方法,我希望能够从dll中提取资源,并将它们作为一个对象返回,然后将其转换为相应的类型 这是我到目前为止的代码 public class GetResource { public static T LoadDllResource<T>(string ResourceFolder, string resourceName, string Extension,

我有一个dll,其中存储图像资源,字体资源等

我在程序集中有一个类,它有一个返回方法,我希望能够从dll中提取资源,并将它们作为一个对象返回,然后将其转换为相应的类型

这是我到目前为止的代码

        public class GetResource
    {
            public static T LoadDllResource<T>(string ResourceFolder, string resourceName, string Extension, int width = 10, int height = 10)
            {
                Assembly myAssembly = Assembly.GetExecutingAssembly();
                Stream myStream = myAssembly.GetManifestResourceStream(myAssembly.GetName().Name + "." + ResourceFolder + "." + resourceName + "." + Extension);

// convert stream to object by doing something like this (I'm not sure)
//return (T)Convert.ChangeType(EndResultOFStreamConversion, typeof(object));
            }
    }
公共类GetResource
{
公共静态T LoadDllResource(字符串ResourceFolder,字符串resourceName,字符串扩展名,int-width=10,int-height=10)
{
Assembly myAssembly=Assembly.getExecutionGassembly();
Stream myStream=myAssembly.GetManifestResourceStream(myAssembly.GetName().Name+“+资源文件夹+”+“+资源名称+”+扩展名);
//通过这样做将流转换为对象(我不确定)
//return(T)Convert.ChangeType(endresultofstreamconvertion,typeof(object));
}
}
这样使用它

    Font SomeFont1=  GetResource.LoadDllResource<Font>("Resources","Splash","ttf")

UnityEngine.Texture2D SomeImage2=  GetResource.LoadDllResource<UnityEngine.Texture2D>("Resources","SnowImage","png")
Font-SomeFont1=GetResource.LoadDllResource(“资源”、“飞溅”、“ttf”)
UnityEngine.Texture2D SomeImage2=GetResource.LoadDllResource(“资源”、“雪花图像”、“png”)
如果这个问题有问题,请告诉我。谢谢你的帮助

我在Unity引擎中工作,该引擎无法很好地支持使用System.Drawing的混合程序集。您可以在
System.Drawing
命名空间中使用将流转换为图像(请确保首先向程序集添加对System.Drawing.dll的引用)。我不太清楚您所说的“字体资源”是什么意思,但我会这样做:

public class GetResource
{
    public Image GetImageFromResource(string resourceFolder, string resourceName, string extension)
    {
        return Image.FromStream(this.GetStreamFromResource(resourceFolder, resourceName, extension), true);
    }

    private Stream GetStreamFromResource(string ResourceFolder, string resourceName, string Extension)
    {
        Assembly myAssembly = Assembly.GetExecutingAssembly();
        return myAssembly.GetManifestResourceStream(myAssembly.GetName().Name + "." + ResourceFolder + "." + resourceName + "." + Extension);

    }
}

哦,我不需要使用系统。绘图来做这个。我不知道。不幸的是,我在UnityEngine中工作,UnityEngine不支持系统。在混合装配中绘制良好。我将对问题进行编辑,将其包括在内。谢谢哦,还有。我只需要让这个方法处理的不仅仅是图像类型。但是字符串,字体,纹理2D,任何其他类别。我没有统一的经验。但是,你不应该在问题中使用一般方法。这将要求您检查T的类型(如果T=image..if T=font..),这是一种非常糟糕的做法,永远不应该使用。然后,如何返回试图从dll中提取的(T)类型的对象?如果我想要dll中的字体文件,我会说'Font-SomeFont1=GetResource.LoadDllResource(“Resources”,“Splash”,“ttf”)`如果我想要一个纹理2D图像,我会说
UnityEngine.Texture2D-SomeImage2=GetResource.loaddlresource(“Resources”,“SnowImage”,“png”)
,在自动生成的资源设计器中,我将System.Drawing.Bitmap替换为UnityEngine.Texture2D