C# 序列化词典<;字符串,对象>;在ProtoBuf中,网络失败

C# 序列化词典<;字符串,对象>;在ProtoBuf中,网络失败,c#,serialization,protobuf-net,C#,Serialization,Protobuf Net,(注意:字典中T是一些ProtoContract/ProtoMembered类,可以正常工作。)这个问题只发生在我使用object类型时 我正试图把一本词典连载起来 typeof(object)不起作用。应该吗?我应该实现基于字符串的变通方法吗 在这种情况下,对象将永远是.net原语 [Test] public void De_SerializeObjectDictionary2() { var d = new Dictionary<string,

(注意:字典中T是一些ProtoContract/ProtoMembered类,可以正常工作。)这个问题只发生在我使用object类型时

我正试图把一本词典连载起来

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);
    }

直接实现这一点的愿望已经被提出,并且在我的清单上,但是:将具有内置序列化(int等)的类型作为继承的一部分来处理,有一些技术问题不是很有趣。我在这里的建议是使用具有泛型具体实现的抽象基类,以及基类上的“include”属性,以在运行时引用每个预期类型-
Foo
Foo
等。这里还需要考虑动态类型,但如果没有一些小的调整,我认为这不会立即适用于字典。不过也可以。

你知道所有可能的时间类型吗?这里有多少种类型?字典中的所有类型都可以序列化吗?是的。这是我试过的灵长类动物。它们都会导致错误。我想它们已经被Protobuf网络库定义了。对那很好。谢谢你的建议。
        //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);