C_Sharp 板


LINE

是这样的 我有写一个序列化的方法把我的class存档 BinaryFormatter myBinaryFormatter = new BinaryFormatter(); myBinaryFormatter.Serialize(oFileStream, saveObj); 现在的问题是,我的saveObj会需要与时俱进的新增功能和变数 但每次更新我的class,我的旧的存档就无法被使用 (因为格式不符) 我目前想到的解决方法是用继承 像是这样:主名称 + 撰写日期,然後继承最後一版的class如下 class MyObj180920: object{} class MyObj180925: MyObj180920{} class MyObj181001: MyObj180925{} 然後我有个上层class manage { Object myObj; System.Type myObjType; } 每次我的程式会实体化最新的class和type myObj = new MyObj180920; myObjType = (new MyObj180920).GetType(); 然後序列化的时候应该(我觉得)会将实作品(MyObj180920)存入硬碟 而非父类别型态(Object) 当我更新版本後(180925) 我期望我的反序列化能根据 myObjType 转型成正确的过往类别 而不用每次都做转型判断 switch (myObj.GetType().Name) { case "MyObj180920": break; case "MyObj180925": break; } 但是我不会用根据System.Type做转型指令,有人知道要怎麽用吗? 感谢大家拨冗观看~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.250.235.221
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1537407838.A.1A0.html
1F:→ awwseed: 弄一个 Interface 让各个 Class 实作? 09/20 13:16
2F:推 anumis: 有试过json吗? 09/20 16:40
3F:→ s4300026: awwseed 我存的是class,所以应该不能用interface吧? 09/20 18:55
4F:→ s4300026: anumis json 完全没听过耶,或许是第三条路? 09/20 19:00
实际上我在找好的存档方式,因为每日要用mail和excel交进度, 每次都要调整excel格式和寄信 觉得很懒且步骤重复 所以想说写个小程式做协助 写了之後觉得好用 但後来发现存class後每次有个小更新 就会造成旧的class读档失败 深觉这样不是办法, 才想了这个办法,但实作上遇到困难,才跑上来问,以上。 ※ 编辑: s4300026 (220.134.201.145), 09/20/2018 19:25:59
5F:→ testPtt: 用一个新class包装IMyObj介面栏位 序列化这个class 09/20 20:54
6F:→ s4300026: 这样就可以添加新interface栏位了吗? 09/21 07:33
7F:→ testPtt: 可能不行 没试过 我只用过明确结构的 会变动的好像不适合 09/21 09:07
8F:→ testPtt: 不过似乎继承IExtensibleDataObject可行 09/21 09:15
9F:推 sd016808: 如果只是新增属性 没有修改旧的属性名称 应该直接用json 09/21 13:26
10F:→ sd016808: 就可以处理了吧? 甚至也不需要那麽多版本的class 但如 09/21 13:27
11F:→ sd016808: 果每个版本之间的变化都很大 建议是实作每个版本之间的 09/21 13:27
12F:→ sd016808: 转换 根据版本来决定new哪个版本的class 然後在一版一 09/21 13:27
13F:→ sd016808: 版的转换到最新版 这样一定没问题 09/21 13:27
14F:推 totte: 用reflection 09/21 18:46
15F:推 jass970991: 我没想过这种问题 但如果是我 我会考虑给一个dictiona 09/23 00:28
16F:→ jass970991: ry<某种enum,object> 然後这个object 才是你的class 09/23 00:28
17F:→ jass970991: 要用的时候再转 每次更新时直接创新的class 不过这 09/23 00:28
18F:→ jass970991: 方法也不是很好 我觉得这个难题应该要先想清楚 为什 09/23 00:28
19F:→ jass970991: 麽这个class会有这麽高频的变动还不能用generic收纳这 09/23 00:28
20F:→ jass970991: 些变动 我自己是觉得有点怪 不过也可能我就真的刚好没 09/23 00:28
21F:→ jass970991: 遇到 09/23 00:28
22F:→ s4300026: 我觉得只要更新难免会多东西吧,要想怎麽处理更新前的存 09/23 10:27
23F:→ s4300026: 档 09/23 10:27
24F:推 jass970991: 主要是你这样更新 一开多条branch 开发 merge时就会爆 09/23 11:12
25F:→ jass970991: 炸了 所以我才会想说到底事需求真的这样 还是没考虑清 09/23 11:12
26F:→ jass970991: 楚 09/23 11:12
27F:→ s4300026: 我承认是我没有考虑清楚,原本就没有打算写给大程式,只 09/23 11:17
28F:→ s4300026: 想要几个简单的功能,没想到想要的东西越加越多 09/23 11:17
29F:推 jass970991: 那你要做的变更的数据形态可以做整合到同一个list或di 09/23 11:19
30F:→ jass970991: c里吗? 这样未来会比较好处理 09/23 11:19
31F:推 jass970991: 如果是会有function增加的问题 建议把单纯的资料拉出 09/23 11:22
32F:→ jass970991: 来做成model 序列化model就好 09/23 11:22
33F:→ s4300026: 我知道了,简言之,就是存资料,不要存方法,这样我反 09/25 11:41
34F:→ s4300026: 而觉得我该走DB,而不是走序列化 09/25 11:41







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP