sgt*_*gtz 7 c# serialization protobuf-net
(注意:字典,其中T是一些ProtoContract/ProtoMembered类工作正常.)这个问题只发生在我的类型对象上.
我试图序列化词典工作字典.
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);
}
Run Code Online (Sandbox Code Playgroud)
我试图提前定义这些类型......但我认为默认情况下它们是由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);
Run Code Online (Sandbox Code Playgroud)
已经提出了直接执行此操作的愿望,并且在我的列表中查看,但是:将具有内置序列化(int 等)的类型视为继承的一部分存在一些不是很有趣的技术问题。我在这里的建议是使用具有通用具体实现的抽象基类,以及基类型上的“include”属性来在运行时引用每个预期类型 -Foo<int>等等Foo<string>。DynamicType 也是这里的一个考虑因素,但没有一些小的调整我认为这不会立即适用于字典。不过,它可以做到。
| 归档时间: |
|
| 查看次数: |
4604 次 |
| 最近记录: |