一个序列化赋值的问题

zmidl 2019-01-30 03:51:47
有Person类结构如下

public class Person
{
[IgnoreDataMember]
public string Name { get; set; }

[DataMember]
public int Age{ get; set; }

[DataMember]
public int Weight{ get; set; }
}

现在有个老王如下
var 老王 = new Person{ Name ="老王" ,Age =44, Weight = 130};

然后通讯过来反序列化一个 5年后的老王 由于Name是IgnoreDataMember所以得到空值null
五年后老王信息 { Name =null, Age = 49, Weight = 140}

如果直接引用 老王= 五年后的老王 那么意味着 Name被覆盖了变成了没有名字的人 所以手动设置属性
老王.Age = 五年后老王.Age
老王.Weight = 五年后老王.Weight

这样目前满足功能需求了,但是 现在要扩增老王的属性了,属性一多 逐个赋值的话 代码量上去了。
有啥办法可以根据类的序列化特性 一下子把DataMemer的属性set到目标对象而同时过滤掉IgnoreDataMember呢?

仅有50分了 全部压上了,有经验的C 友们支支招吧谢谢了。


...全文
423 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmidl 2019-02-04
  • 打赏
  • 举报
回复
引用 7 楼 以专业开发人员为伍 的回复:
你把一个对象的属性逐一赋值到另外一个对象的属性,这其实是你自己写的代码。

写业务代码就写一遍。如果以为什么都可以写一堆解析、反射之类的弱类型代码,其实就算不需要什么编程能力(其实不是)的话,这类东西也往往是性能非常糟糕、而且意外的运行时和逻辑错误频出。写成强类型代码怎么了呢?反正是写一遍转换器代码,为什么怕写?怕写代码就不用编程了呗。

蛮中肯的,我目前就是封装一个赋值的方法函数 ,反序列化后的对象引用一次赋值的方法
  • 打赏
  • 举报
回复
你把一个对象的属性逐一赋值到另外一个对象的属性,这其实是你自己写的代码。 写业务代码就写一遍。如果以为什么都可以写一堆解析、反射之类的弱类型代码,其实就算不需要什么编程能力(其实不是)的话,这类东西也往往是性能非常糟糕、而且意外的运行时和逻辑错误频出。写成强类型代码怎么了呢?反正是写一遍转换器代码,为什么怕写?怕写代码就不用编程了呗。
正怒月神 2019-01-31
  • 打赏
  • 举报
回复
automapper, 序列化,反序列化,都可以。
  • 打赏
  • 举报
回复
引用 楼主 zmidl 的回复:
这样目前满足功能需求了,但是 现在要扩增老王的属性了,属性一多 逐个赋值的话 代码量上去了。 有啥办法可以根据类的序列化特性 一下子把DataMemer的属性set到目标对象而同时过滤掉IgnoreDataMember呢?
只要你写代码,那么你早晚要写这个代码,而且只需要写一遍(就是作为一个方法)。这有什么?
  • 打赏
  • 举报
回复
你直接将原来的序列化再反序列化后就是一个全新的对象,然后将IgnoreDataMember的属性赋值给这个新对象不就行了?
liusa1997 2019-01-30
  • 打赏
  • 举报
回复
我倒是没看到如何单纯挑出所有序列化的属性然后针对性的赋值。所以,要么当你序列化的属性数量大于不需要序列化的数量时,你直接将通讯过来的值给这个对象,然后依次将不需要序列化的属性赋值;要么当你序列化的属性数量少于不需要序列化的数量时,你直接将通讯过来的值给这个对象,然后依次将需要序列化的属性赋值。
liyi189 2019-01-30
  • 打赏
  • 举报
回复
关注!等高手解决!
OrdinaryCoder 2019-01-30
  • 打赏
  • 举报
回复
将老王的Name赋值到五年后的老王对象上,然后直接饮用 老王 = 五年后的老王,这样无论你这么扩展属性只要不用IgnoreDataMember标记,那么就不用添加额外的代码

110,533

社区成员

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

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

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