如何序列化(使用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);
         }
    }

标记现有类的选项有哪些?如何解决这个问题?

如何序列化(使用protobuf-net)作为另一个程序集(dll)中描述的对象的字段

理论上,您可以使用RuntimeTypeModel API手动配置外部类型,即

RuntimeTypeModel.Default.Add(typeof(SomeTYpe), false).Add("Member", 1); // etc

但是:如果外部类型是DTO样式的对象,则此操作效果最佳。如果它是一个复杂的域对象,最好单独引入DTO映射,即您控制的一组对象,代表您需要的数据,而不是实现。