如何在一个程序集中序列化在另一个中反序列化
用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;try
{
IFormatter formatter = new BinaryFormatter();
byte[] buffer = Encoding.ASCII.GetBytes(str);
//byte[] buffer = Convert.FromBase64String(str);
MemoryStream stream = new MemoryStream(buffer);
obj = (T)formatter.Deserialize(stream);
stream.Flush();
stream.Close();
}
catch (Exception ex)
{
throw new Exception("fail:" + ex.Message);
}
return obj;
}
}[Serializable]
public class A
{
public string a;
}
在另一个程序集中:
class Program
{
static void Main(string[] args)
{
string x = "AAEAAAD/////AQAAAAAAAAAMAgAAAEpDb25zb2xlQXBwbGljYXRpb24zLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAFUNvbnNvbGVBcHBsaWNhdGlvbjMuQQEAAAABYQECAAAACgs=";var s = Tool.Desrialize<A>(x);
Console.WriteLine(s.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);
}
catch (Exception ex)
{
throw new Exception("fail:" + ex.Message);
}
}public static T Desrialize<T>(string str) where T : class
{
T obj = null;
try
{
IFormatter formatter = new BinaryFormatter();
byte[] buffer = Convert.FromBase64String(str);
MemoryStream stream = new MemoryStream(buffer);
obj = (T)formatter.Deserialize(stream);
stream.Flush();
stream.Close();
}
catch (Exception ex)
{
throw new Exception("fail:" + ex.Message);
}
return obj;
}
}[Serializable]
public class A
{
public string a;
}
无非就是替换其中关于类型程序集信息的替换。
当然,此解决方案的一个问题是,随着每次程序集版本号的修改,代码中的 Replace 部分也要做修改。蛋疼。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器