相关疑难解决方法(0)

.net中DataContract属性和Serializable属性之间的区别

我正在尝试使用以下方法创建对象的深层克隆.

    public static T DeepClone<T>(this T target)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, target);
            stream.Position = 0;
            return (T)formatter.Deserialize(stream);
        }
    } 
Run Code Online (Sandbox Code Playgroud)

此方法需要一个Serialized对象,即一个具有"Serializable"属性的类的对象.我有一个类,它具有属性"DataContract",但该方法不使用此属性.我认为"DataContract"也是一种序列化器,但可能与"Serializable"不同.

有谁能请给我两者之间的区别?另请告诉我是否可以创建一个只有1个属性的对象的深度克隆,它可以完成"DataContract"和"Serializable"属性的工作,也可能是创建深度克隆的不同方式?

请帮忙!

.net c# serialization clone

14
推荐指数
2
解决办法
1万
查看次数

使用动态加载的 .Net 程序集进行二进制序列化

我将我的类的一个实例序列化为一个文件(带有BinaryFormatter

之后,在另一个项目中,我想反序列化这个文件,但没有成功,因为我的新项目没有我旧类的描述。在.Deserialize()收到一个异常

Unable to find assembly '*MyAssembly, Version=1.9.0.0, Culture=neutral, PublicKeyToken=null'.*".
Run Code Online (Sandbox Code Playgroud)

但是我有包含我想要反序列化的旧类的描述的程序集的 .DLL。

我不想在项目中添加对 this DLL 的引用(我希望能够反序列化任何类型程序集的类......)

如何通知序列化器/反序列化器使用我动态加载的程序集?

.net c# serialization .net-assembly

9
推荐指数
2
解决办法
1388
查看次数

DisallowApplicationBaseProbing = true时需要连接AssemblyResolve事件

设置DisallowApplicationBaseProbing = true时,我需要在创建的AppDomain上连接AssemblyResolve事件。我这样做的原因是强制运行时调用需要解析程序集的AssemblyResolve事件,而不是先进行探测。这样,另一个开发人员就不能仅将MyDllName.dll粘贴在ApplicationBase目录中,并覆盖我想在AssemblyResolve事件中加载的程序集。

这样做的问题如下:

  class Program
  {
 static void Main()
 {
    AppDomainSetup ads = new AppDomainSetup();
    ads.DisallowApplicationBaseProbing = true;
    AppDomain appDomain = AppDomain.CreateDomain("SomeDomain", null, ads);
    appDomain.AssemblyResolve += OnAssemblyResolve;
    appDomain.DoCallBack(target);
 }

 static System.Reflection.Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
 {
    Console.WriteLine("Hello");
    return null;

 }

 private static void target()
 {
    Console.WriteLine(AppDomain.CurrentDomain);
 }
  }
Run Code Online (Sandbox Code Playgroud)

代码永远不会超出+ = OnAssemblyResolve行。

当代码尝试执行时,新的应用程序域将尝试解析我正在其中执行的程序集。由于DisallowApplicationBaseProbing = true,因此不知道在哪里可以找到该程序集。看来我有鸡肉和鸡蛋问题。它需要解析我的程序集以连接程序集解析器,但需要程序集解析器来解析我的程序集。

感谢您提供的所有帮助。

-麦克风

c# assembly-resolution

4
推荐指数
1
解决办法
1998
查看次数