gpt4 book ai didi

.net - C# : How Are Boxed Value Types Handled 中的 Protocol Buffer

转载 作者:行者123 更新时间:2023-12-04 23:11:19 24 4
gpt4 key购买 nike

在以下示例中:

public class RowData
{
public object[] Values;
}

public class FieldData
{
public object Value;
}

我很好奇 protobuf-net 或 dotnet-protobufs 将如何处理这些类。我对protobuf-net比较熟悉,所以我实际拥有的是:
[ProtoContract]
public class RowData
{
[ProtoMember(1)]
public object[] Values;
}
[ProtoContract]
public class FieldData
{
[ProtoMember(1)]
public object Value;
}

但是,我收到一条错误消息,提示“未找到合适的默认对象编码”。有没有一种简单的方法来处理这些类(class),我只是不知道?

要详细说明用例:

这是远程处理中使用的数据类的缩小版本。所以基本上它看起来像这样:
FieldData data = new FieldData();
data.Value = 8;

remoteObject.DoSomething(data);

注意:为简单起见,我省略了 ISerializable 实现,但正如您所期望的那样。

最佳答案

重新 protobuf-net,我维护:

这里的问题不是值类型(它通常可以很好地处理) - 它是开放的 object用法,这意味着它根本不知道期望什么数据,因此不知道如何对其进行编码/解码。

目前,我想不出一种简单/干净的方法来处理它。它将处理一系列常见的值类型场景、列表和基于契约(Contract)(数据契约(Contract)、原型(prototype)契约(Contract)或一些 xml 模式)的任何层次结构,但它需要一个线索。

也许如果你能澄清用例,我可能会提供更多帮助?例如,以上内容不适用于 DataContractSerializerXmlSerializer任何一个...

重新 dotnet-protobufs;我无法真正发表评论,但我敢肯定它会更不宽容;它旨在与从 .proto 文件生成的类一起使用,因此 object根本不会进入模型(乔恩:如果我错了,请纠正我)。

如果你留下更多信息,你能在这里发表评论吗?所以我可以很容易地找到它......或者,直接给我发邮件(请参阅我的 SO 个人资料)。

编辑-这是我想到的骇人听闻的事情-目前无法正常工作,但明天(可能)我会弄清楚原因。请注意,理论上额外的成员都可能是私有(private)的 - 我只是想在调试时让它变得容易。请注意,这不会占用任何额外的存储空间。就像我说的,它今天不起作用,但它应该 - 我会找出原因......

[ProtoContract]
public class FieldData
{
public object Value {get;set;}

[ProtoMember(1)]
public int ValueInt32 {
get { return (int)Value; } set { Value = value; } }
public bool ValueInt32Specified {
get { return Value != null && Value is int; } set { } }

[ProtoMember(2)]
public float ValueSingle {
get { return (float)Value; } set { Value = value; } }
public bool ValueSingleSpecified {
get { return Value != null && Value is float; } set { } }

// etc for expected types
}

关于.net - C# : How Are Boxed Value Types Handled 中的 Protocol Buffer ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/562558/

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