gpt4 book ai didi

c# - 在 ProtoBuf-net 中序列化 Dictionary 失败

转载 作者:太空狗 更新时间:2023-10-29 20:31:47 25 4
gpt4 key购买 nike

(注意:字典中 T 是一些 ProtoContract/ProtoMembered 类工作正常。)这个问题只发生在我的类型对象上。

我正在尝试序列化 Dictionary working 的字典。

typeof(object) 不起作用。应该是?我应该实现基于字符串的解决方法吗?

在这种情况下,对象只会是 .net 基元。

    [Test]
public void De_SerializeObjectDictionary2()
{
var d = new Dictionary<string, object>();

d.Add("abc", 12);

var ms = new MemoryStream();

var model = ProtoBuf.Meta.RuntimeTypeModel.Default;
//model.AutoAddMissingTypes = true;
//model.AutoCompile = true;
//model.InferTagFromNameDefault = true;
//model.Add(typeof (object), false);
//model.Add(typeof(Int32), true);
//model[typeof (object)].AddSubType(50, typeof (Int32));

model.Serialize(ms, d);
Serializer.Serialize<Dictionary<string,object>>(ms, d);
// <--- No serializer defined for type: System.Object

// or
//model.Add(typeof (object), false);
//Serializer.Serialize<Dictionary<string, object>>(ms, d);
//<-- Unexpected sub-type: System.Int32
ms.Position = 0;

var d2 = Serializer.Deserialize<Dictionary<string, object>>(ms);
}

我试图提前定义这些类型...但我认为它们默认由 protobuf-net 处理

        //model.Add(typeof (object), false);
//model[typeof (object)].AddSubType(50, typeof (Int32));
/*
//model.Add(typeof(int), false);
//model.Add(typeof(string), false);
//model.Add(typeof(short), false);
//model.Add(typeof(DateTime), false);
//model.Add(typeof(long), false);
//model.Add(typeof(bool), false);
//model.Add(typeof(int[]), false);
//model.Add(typeof(string[]), false);
//model.Add(typeof(short[]), false);
//model.Add(typeof(DateTime[]), false);
//model.Add(typeof(long[]), false);
//model.Add(typeof(bool[]), false);

//model.Add(typeof(int?), false);
//model.Add(typeof(short?), false);
//model.Add(typeof(DateTime?), false);
//model.Add(typeof(long?), false);
//model.Add(typeof(bool?), false);
//model.Add(typeof(int?[]), false);
//model.Add(typeof(short?[]), false);
//model.Add(typeof(DateTime?[]), false);
//model.Add(typeof(long?[]), false);
//model.Add(typeof(bool?[]), false);

//model.Add(typeof(byte[]), false);
//model.Add(typeof(byte), false);

最佳答案

直接执行此操作的愿望已经被提出,并且在我的列表中要查看,但是:将具有内置序列化(int 等)的类型作为继承的一部分处理有一些不是很有趣的技术问题。我在这里的建议是使用具有通用具体实现的抽象基类,以及基类型上的“include”属性以在运行时引用每个预期类型 - Foo<int> , Foo<string>等等。 DynamicType 在这里也是一个考虑因素,但如果没有一些小的调整,我认为这不会立即适用于字典。不过,它可以做到。

关于c# - 在 ProtoBuf-net 中序列化 Dictionary<string,object> 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891415/

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