C#序列化问题(2)

Richardicy 2014-11-18 03:29:58

今天刚提过如下一个问题:
http://bbs.csdn.net/topics/390935242
讨论下来认为在这种场景下C#的序列化只能自己写,所以我会跟C++模块一样,用TLV的格式,
将所有数据都填入一个
List<byte> m_ArchiveData;

现在有个问题,就是输入数据的value有如下两种格式:
1.protected Dictionary<int, string> _values
2.protected Dictionary<int, T> _data

现在type和length我都好处理,但是上述这两种value是泛型的dictionary,在C#里面有没有什么比较简单和高性能的方式
把这两种value给填入List<byte>里面去的?
之前c++的vector可以用insert方法,这里就不知道咋办了

...全文
119 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Richardicy 2014-11-18
  • 打赏
  • 举报
回复
我刚在翻到dictionary里面貌似有个to_array方法,不知道是否管用
Richardicy 2014-11-18
  • 打赏
  • 举报
回复
回楼上,因为服务器端是自己封装的格式,所以BinaryFormatter就没法用了 另外C# PInvoke我也考虑过,问题是服务器端那边的设计思路跟C#完全不一样 C++部分 bool Serialize(const IElementMap* pHeader, std::string* pOutput) bool Deserialize(const std::string& sInput, IElementMap* pOutputHeader) C# public bool Serialize(Attribute attr, out byte[] ret) public bool Serializebyte[](dataheaderString, Attribute attr) 这里比较麻烦的是 IElementMap和attr 是两种完全不一样的数据结构,如果要直接调用C++的库的话 C#模块就必须进行大规模重构,或者进行一次非常麻烦的数据结构映射 老大说这次的改动有两个要求: 1.接口不准变 2.性能要提高
  • 打赏
  • 举报
回复
BinaryFormatter个人感觉挺好的(没有做大数据测试),至少比XML和Json序列化要快,产生的数据也比他们小 不过看了你原文链接,感觉1#的建议应该是折衷后的最好方案了吧 C# PInvoke还是很快的,再加上你自己组织数据 就算是直接用C#来实现客户端的也慢不了,一般是服务端那边要求高
Richardicy 2014-11-18
  • 打赏
  • 举报
回复
回楼上,那个序列化的目标数据类型是不能变的list<byte> 因为需要把这玩意快速转成byte[]给发出去
wangyue4 2014-11-18
  • 打赏
  • 举报
回复
泛型的话应该只能通过反射来序列化吧,性能肯定不会有多好
csdn_aspnet 2014-11-18
  • 打赏
  • 举报
回复
你可以List<T>或者List<object> 还可以建立基类 那两个就是子类 你的List<cls>装载父类
Richardicy 2014-11-18
  • 打赏
  • 举报
回复
回楼上,那些在特殊场景下性能不给力,要求自己写一个私有的放在特殊场景下用
  • 打赏
  • 举报
回复
你为什么不采取一种通用的序列化格式(例如 json)呢?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧