【问题标题】:Serialization exception in remoting C#远程 C# 中的序列化异常
【发布时间】:2015-05-31 13:50:54
【问题描述】:

在写这个问题之前我已经尝试了很多,但我找不到任何答案。

我正在制作一个远程处理程序,它就像一个商店,我已经实现了.dll、服务器和客户端,除了我有一个与序列化相关的大问题之外,一切都很好,这是关于我的代码的一点总结。

[Serializable]
public class Almacen
{
    int nusuarios_on, nusuarios_reg;
    bool server_on;
    ArrayList clientes_activos;
    ArrayList clientes_registrados;
    ArrayList productos_almacen;}

[Serializable]
public class Cliente
{
    protected int id;
    protected String usuario, dni;
    private String contraseña;
    Pedido pedido;}

[Serializable]
public class Pedido
{
    ArrayList productos;
    bool confirmado;
    int preciototal;}

 [Serializable]
public class Producto
{
    private String nombre;
    private int codigo, precio, unidades, stock; //Stock solo lo usamos en el almacen, y unidades solo en pedido.}

然后,我有我的 .dll 服务,其中我有一个方法,其中有一个“Pedido”对象,在调用该方法时通过参数中的值传递。

public class ServicioAlmacen : MarshalByRefObject
{
    private Almacen almacen;
    .
    .
    .
    public int añadirProductoAlmacen(int id, Producto p) {
    if(id==1) {
        if(!productoRepetido(p)) {
            almacen.getProductos_almacen().Add(p);
            Console.WriteLine("Añadido el producto {0} al almacen.", p.getCodigo());
            return 0;
        }
        else {
            Console.WriteLine("Intento de añadir un producto repetido.");
            return -1;
        }
    }
    else {
        Console.WriteLine("Acceso denegado.");
        return -2;
    }   
   }
    .
    .  
    .
}

当在客户端调用此方法时,我得到一个 SerializationException,它告诉我 ServiceAlmacen.Producto 未标记为序列化。 我不明白为什么我会得到那个异常,因为我将每个类都标记为序列化,知道吗?谢谢。

PD:如果您需要我的客户端或服务器代码,请告诉我,我将编辑发布。

【问题讨论】:

  • 可能相关,注意只有公共字段和属性会被序列化。 Here for private serialization(通过 DataContract 序列化)
  • 我怎样才能序列化我的类的私有属性?

标签: c# .net serialization remoting


【解决方案1】:

您应该让您的成员在 Producto 类中作为公共成员进行系列化并添加 或检查此线程以序列化私人成员解决方法 C# serialize private class member

【讨论】:

  • 我已经尝试过了,但仍然遇到同样的问题,我应该在方法中使用它之前序列化 'p' 对象吗?
【解决方案2】:

我终于找到了解决办法!

答案:

您需要在我的代码中附加的类“[Serializable]”的声明上方添加,但您还必须在每个需要序列化的类中扩展“MarshalByRefObject”类,只需扩展每个序列化异常已解决。

希望它对某人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多