如何序列化(使用protobuf-net)作为另一个程序集(dll)中描述的对象的字段
本文关键字:dll 字段 描述 程序集 对象 序列化 使用 protobuf-net 另一个 | 更新日期: 2023-09-27 18:25:17
我在项目中使用Microsoft.CodeAnalysis.CSharp.dll。我有一个类,这个类的属性是一个在Microsoft.CodeAnalysis.CSharp.dll中描述并连接到我的项目的对象。
[ProtoContract]
public class FunctionAnnotation :
{
[ProtoMember(1)] public IMethodSymbol Symbol { get; set; }
}
Microsoft.CodeAnalysis.CSharp.dll.中描述的IMethodSymbol
我使用protobuf网络。当你试图序列化一个对象时,它会抛出一个异常:
没有为以下类型定义序列化程序:Microsoft.CodeAnalysis.IMetnodSymbol
很明显,Microsoft.CodeAnalysis.Method.Symbol未标记为[ProtoContract]
private void Serialization()
{
string folderName = @"f:/serialization/";
Directory.CreateDirectory(folderName);
int name = this.Symbol.ToString().GetHashCode();
using (FileStream fs = new FileStream("f:/serialization/" + name + ".dat", FileMode.OpenOrCreate))
{
Serializer.Serialize(fs, this);
}
}
标记现有类的选项有哪些?如何解决这个问题?
理论上,您可以使用RuntimeTypeModel
API手动配置外部类型,即
RuntimeTypeModel.Default.Add(typeof(SomeTYpe), false).Add("Member", 1); // etc
但是:如果外部类型是DTO样式的对象,则此操作效果最佳。如果它是一个复杂的域对象,最好单独引入DTO映射,即您控制的一组对象,代表您需要的数据,而不是实现。