方法用于 在二进制数据中读取Map格式的所有Key和值偏移量,如果你想了解该二进制数据中的键值情况,但又不想完全读取它,那么这个方法非常有用.
var val = new Dictionary<object, object>(){ { "Id" , 1 }, { "Path" , "../t.jpg" }, { "Data" , new byte[3000] } }; var buf = BssomSerializer.Serialize(val); var bsfm = new BssomFieldMarshaller(buf); bsfm.ReadAllMapKeys<object>(BssomFieldOffsetInfo.Zero).Print(); //output // line 1: BssomString::"Id", BssomFieldOffsetInfo // line 2: BssomString::"Path", BssomFieldOffsetInfo // line 3: BssomString::"Data", BssomFieldOffsetInfo TryWriteValue方法用于 对二进制数据的值进行修改,当你只想修改对象中的某个值,而不用重新序列化整个对象时,那么这个方法非常有用
//修改字符串对象 var val = "abcd"; var buf = BssomSerializer.Serialize(val); var bsfm = new BssomFieldMarshaller(buf); bsfm.TryWrite(BssomFieldOffsetInfo.Zero, "abc"); string upVal = BssomSerializer.Deserialize<string>(buf); upVal.Is("abc"); //修改IDict对象中的某个键 var val = new Dictionary<string, object>(){ { "Id" , 1 }, { "Path" , "../t.jpg" }, { "Data" , new byte[3000] } }; var buf = BssomSerializer.Serialize(val); var bsfm = new BssomFieldMarshaller(buf); bsfm.TryWrite(bsfm.IndexOf("[Id]"), 3); var upVal = BssomSerializer.Deserialize<Dictionary<string, object>>(buf); upVal["Id"].Is(3); //修改IDict对象中的某个键 var val = new MyClass() { Name = "bssom", Nature = "Binary", Data = new int[] { 3, 2, 1} }; var buf = BssomSerializer.Serialize(val); var bsfm = new BssomFieldMarshaller(buf); bsfm.TryWrite(bsfm.IndexOf("[Name]"), "zz"); var upVal = BssomSerializer.Deserialize<MyClass>(buf); upVal["Name"].Is("zz"); //修改Array对象中的某个元素 var val = new object[] { "abc" , 37 }; var buf = BssomSerializer.Serialize(val); var bsfm = new BssomFieldMarshaller(buf); bsfm.TryWrite(bsfm.IndexOf("$1"), 40); var upVal = BssomSerializer.Deserialize<MyClass>(buf); ((int)upVal[1]).Is(40); //组合修改对象中的某个元素 var val = new object[] { 22, 37, new MyClass() { Name = "bssom", Nature = "Binary", Data = new int[] { 3, 2, 1} } }; var buf = BssomSerializer.Serialize(val); var bsfm = new BssomFieldMarshaller(buf); bsfm.TryWrite(bsfm.IndexOf("$2[Name]"), "zz"); var upVal = BssomSerializer.Deserialize<MyClass>(buf); ((MyClass)upVal[1]).Name.Is("zz"); 12.如何参与项目贡献 如果你想参与本项目的发展,那么我将非常荣幸和高兴,欢迎Fork或Pull Request,也可以加入QQ群976304396来进行开源技术的探讨 点击加入群聊.NET开源技术交流群 禁水,只能聊技术 13.谁在使用BssomDB(即将开源) 一个使用Bssom协议的纯C#的嵌入式事务型文档数据库
14.其它我喜欢和我一样的人交朋友,不被环境影响,自己是自己的老师,欢迎加群 Net开源技术交流群 976304396 ,与我讨论与性能相关的话题!
想了解我日常是怎样写代码的吗? 欢迎关注我的抖音账号: 198152455 .
作者:小曾
出处:https://www.cnblogs.com/1996V/p/13884968.html 欢迎转载,但请保留以上完整文章,在显要地方显示署名以及原文链接。
Net开源技术交流群 976304396 , 抖音账号: 198152455