[英]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.