gpt4 book ai didi

c# - 与 protobuf-net 和 C# 的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 12:50:52 26 4
gpt4 key购买 nike

有人知道为接口(interface)设置ProtoContract的正确方法是什么吗?

我仅使用属性得到以下异常“一旦生成序列化程序就无法更改类型”。

使用的代码:

    [ProtoContract]
public class Lesson5TestClass2 : ILesson5TestInteface1
{
[ProtoMember(1)]
public string Name { get; set; }
[ProtoMember(2)]
public string Phone { get; set; }
}

[ProtoContract]
[ProtoInclude(1000, typeof(Lesson5TestClass2))]
public interface ILesson5TestInteface1
{
[ProtoMember(1)]
string Name { get; set; }
[ProtoMember(2)]
string Phone { get; set; }
}

只有添加以下设置才能反序列化:

  RuntimeTypeModel.Default.Add(typeof (ILesson5TestInteface1), true)
.AddSubType(50, typeof(Lesson5TestClass2));

我真的很想只使用属性来配置它。

我正在使用 NuGet 的 protobuf-net r470。

顺便说一句:这个例子来自一组“测试类(class)”,展示了如何为我的同事使用 protobuf-net 进行序列化。

感谢阅读:)

最佳答案

有趣;是的,上面好像有东西。但是,它确实在作为成员公开时起作用,即

[ProtoContract]
class Wrapper
{
[ProtoMember(1)]
public ILesson5TestInteface1 Content { get; set; }
}
static class Program
{
static void Main()
{
Wrapper obj = new Wrapper
{
Content = new Lesson5TestClass2()
}, clone;
using(var ms = new MemoryStream())
{
Serializer.Serialize(ms, obj);
ms.Position = 0;
clone = Serializer.Deserialize<Wrapper>(ms);
}
// here clone.Content *is* a Lesson5TestClass2 instance
}
}

我将不得不查看作为root 对象的接口(interface)支持是怎么回事。

关于c# - 与 protobuf-net 和 C# 的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com