首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从组装A到组装B中的X型铸造

从组装A到组装B中的X型铸造
EN

Stack Overflow用户
提问于 2019-03-02 21:08:01
回答 2查看 229关注 0票数 2
  • 我有两个项目在一个解决方案。(叫A和B)。他们都成了集会。
  • 我有一个被其他两个项目引用的共享项目(称为S)
  • 我在项目S中有一个类(称为C)
  • 我在项目A中序列化它
  • 我在项目B中反序列化它
  • 我不能把它投给C

问题是,如果反序列化对象的类型是"C,A“,但是当我编写代码时:

代码语言:javascript
复制
var c = GetDeserializedObject() as C;

C将为null,因为GetDeserializedObject() is C返回false。

问题:

知道我该怎么做吗?在程序集A中序列化的程序集B中使用类C。

备注:

我使用这段代码序列化我的对象:

代码语言:javascript
复制
var serialized = MessagePackSerializer.Typeless.Serialize(this);
File.WriteAllBytes(outputFilePath, serialized);

而这个反序列化代码是:

代码语言:javascript
复制
MessagePackSerializer.Typeless.Deserialize(File.ReadAllBytes(inputFilePath)) as C;

附加评论:

我不能使用BinaryFormatter,因为C类包含一些类型不可序列化的属性

我也尝试使用Newtonsoft Json序列化程序,但在反序列化过程中无法读取数据。如果我用类型序列化它,那么就会出现类型不匹配。如果我在没有类型的情况下序列化它们,在某些情况下,系统不能实例化接口类型或抽象类类型。因为我的课程是这样的:

代码语言:javascript
复制
class C {
    IMyInterface i;
}

class MyClass : IMyInterface { }

我就是这样用的:

代码语言:javascript
复制
var c = new C {
    i = new MyClass()
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-04 06:11:04

这是如何反序列化:

代码语言:javascript
复制
MessagePack.Formatters.TypelessFormatter.BindToType = typeName =>
{
    var typeWithoutAssemblyName = typeName.Split(',').FirstOrDefault();
    return Type.GetType(typeWithoutAssemblyName ?? typeName, false);
};

return MessagePackSerializer.Typeless.Deserialize(File.ReadAllBytes(inputFilePath)) as C;
票数 1
EN

Stack Overflow用户

发布于 2019-03-02 22:13:47

我建议您在启用TypeNameHandlig标志的情况下使用JSON序列化器和反序列化程序,这样它就可以处理C类中的接口序列化了

代码语言:javascript
复制
var indented = Formatting.Indented; var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }; string serialized = JsonConvert.SerializeObject(wizardConf, indented, settings);

你可以看到细节这里

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54963004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档