簡體   English   中英

遠程C#中的序列化異常

[英]Serialization exception in remoting C#

在寫這個問題之前,我已經做了很多嘗試,但是找不到任何答案。

我正在制作一個遠程程序,就像一個商店,已經實現了.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未標記為Serialized。 我不明白為什么會收到該異常,因為我將每個類都標記為序列化,有什么想法嗎? 謝謝。

PD:如果您需要我的客戶或服務器代碼,請告訴我,我將進行編輯以發布。

您應該使您的成員在Producto類中成為公共成員,並添加或檢查此線程來對私有成員進行變通解決方法C#序列化私有類成員

我終於找到了解決方案!

回答:

您需要在我的代碼中附加“ [Serializable]”類的聲明,但您還必須在每個需要序列化的類中擴展“ MarshalByRefObject”類,只需擴展每個已解決的序列化異常即可。

希望對某人有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM