2016-12-16 67 views
1

首先,对不起,如果这已在其他地方回答;我环顾四周,但是我在这个主题上发现的几个主题和页面让我感到困惑,因为我对序列化相当陌生。 我正在制作一个C#应用程序,我希望能够通过Internet发送功能。在Google快速搜索之后,我遇到了序列化。我试图用下列方法对我的方法进行序列化和反序列化:C# - 序列化和反序列化方法

public static string ObjectToString(object obj) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     new BinaryFormatter().Serialize(ms, obj); 
     return Convert.ToBase64String(ms.ToArray()); 
    } 
} 

public static object StringToObject(string base64String) 
{ 
    byte[] bytes = Convert.FromBase64String(base64String); 
    using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length)) 
    { 
     ms.Write(bytes, 0, bytes.Length); 
     ms.Position = 0; 
     return new BinaryFormatter().Deserialize(ms); 
    } 
} 

但试图转换为字符串时会引发异常。我加了[Serializable()]它,然后这个方法什么都没做。

经过一些Google搜索之后,我发现在C#中,您无法使用默认方法执行此操作。那么是否有可能做到这一点,如果没有,是否有任何可行的方法来通过TcpClient发送方法? 对不起,这是一个愚蠢的问题。

由于提前,

马修

+1

分布式计算的第一条规则:不要分发你的对象http://martinfowler.com/bliki/FirstLaw.html –

回答

1

的方法是不序列化的,所以没有;你不可以做这个。

如果您正在尝试执行RPC调用,您可以序列化名称和参数,以便您可以在另一侧使用反射,或者仅使用WCF等现有框架。

+0

感谢您的帮助!是否有可能使用DLL来做到这一点? – user52303

+0

@ user52303你能澄清一下吗? DLLs和网络并不是类似的概念 – BradleyDotNET

+0

如在中,可以下载服务器上的DLL中的方法以利用它们的功能。我不知道引用dll的工作原理 - 它们是在编译时实现的,还是可以被动态引用? – user52303