天天看點

如何在一個程式集中序列化在另一個中反序列化

用JSON或者XML等,不存在此問題,或者說相對容易解決此問題。

以下是指特定用Soap來進行序列化和反序列化中碰到的。

在一個程式集中:

class Program {     static void Main(string[] args)     {         //Serialize();         A a = new A();         string re = Tool.Serialize(a);         Console.WriteLine(re);         var b = Tool.Desrialize<A>(re);         Console.WriteLine(b.ToString());     } } class Tool     public static string Serialize<T>(T obj)         try         {             IFormatter formatter = new BinaryFormatter();             MemoryStream stream = new MemoryStream();             formatter.Serialize(stream, obj);             stream.Position = 0;             byte[] buffer = new byte[stream.Length];             stream.Read(buffer, 0, buffer.Length);             stream.Flush();             stream.Close();             //return Convert.ToBase64String(buffer);             string utf8String = Encoding.ASCII.GetString(buffer);             return utf8String;         }         catch (Exception ex)             throw new Exception("fail:" + ex.Message);     public static T Desrialize<T>(string str) where T : class         T obj = null;             byte[] buffer = Encoding.ASCII.GetBytes(str);             //byte[] buffer = Convert.FromBase64String(str);             MemoryStream stream = new MemoryStream(buffer);             obj = (T)formatter.Deserialize(stream);         return obj; [Serializable] public class A     public string a;

在另一個程式集中:

        string x = "AAEAAAD/////AQAAAAAAAAAMAgAAAEpDb25zb2xlQXBwbGljYXRpb24zLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAFUNvbnNvbGVBcHBsaWNhdGlvbjMuQQEAAAABYQECAAAACgs=";         var s = Tool.Desrialize<A>(x);         Console.WriteLine(s.ToString());             return Convert.ToBase64String(buffer);             byte[] buffer = Convert.FromBase64String(str);

無非就是替換其中關于類型程式集資訊的替換。

當然,此解決方案的一個問題是,随着每次程式集版本号的修改,代碼中的 Replace 部分也要做修改。蛋疼。

本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/p/4316443.html,如需轉載請自行聯系原作者