dot*_*emy 9 c# serialization object
好吧,我可能只是在这里遇到了一个史诗般的失败,但是我想说这应该有用.
假设DataProtect.DecryptData将加密字符串作为输入,将解密后的字符串作为输出.假设deserializeXML生成适当的对象并从新解密的字符串返回它.
所以.为什么这不起作用?
class ArrivedDetails
{
///...
    internal ArrivedDetails(string encrypted)
    {
        this = DataProtect.deserializeXML(DataProtect.DecryptData(encrypted));
    }
///...
给我一个错误
Cannot assign to '<this>' because it's read only
更具体地说,我怎样才能使这个工作?我本质上想要解密对象的XML序列化版本,然后在构造函数中反序列化它.
我愿意接受"你不能"(带有解释),因为我可以把它放在其他地方并且只是分配值,但是我的想法说这样的事情应该是可能的.
Fem*_*ref 16
不,这是不可能使用构造函数,你不能重新分配this.
改为使用静态方法:
public static ArrivedDetails CreateFromString(string encrypted)
{
    return DataProtect.deserializeXML(DataProtect.DecryptData(encrypted));
}
叫它:
ArrivedDetails details = ArrivedDetails.CreateFromString(encrypted);
小智 6
您可以使用反射将其存档,如下所示。
var tmp = DataProtect.deserializeXML(DataProtect.DecryptData(encrypted));
foreach (var property in GetType().GetProperties())
    if (property.GetCustomAttributes(typeof (XmlIgnoreAttribute), false).GetLength(0) == 0)
        property.SetValue(this, property.GetValue(tmp, null), null);
这将反序列化的对象分配给一个时间变量,并this使用反射将每个公共属性中的值复制到。此代码段避免使用 XmlIgnore 属性复制属性。
| 归档时间: | 
 | 
| 查看次数: | 7408 次 | 
| 最近记录: |