Deserialize to self

前端 未结 4 599
灰色年华
灰色年华 2021-01-11 18:08

Ok, I\'m probably just having an epic fail here, but my mind wants to say this should work.

Assume DataProtect.DecryptData takes an encrypted string as input and a d

相关标签:
4条回答
  • 2021-01-11 18:17

    You can not assign anything to "this". Change ArriveDetails to a static that return the deserialised object.

    class ArrivedDetails
    {
        static ArrivedDetails Create(string encrypted)
        { return DataProtect.deserializeXML(...) }
    }
    
    0 讨论(0)
  • 2021-01-11 18:23

    No, this is not possible using a constructor, you can't reassign this.

    Use a static method instead:

    public static ArrivedDetails CreateFromString(string encrypted)
    {
        return DataProtect.deserializeXML(DataProtect.DecryptData(encrypted));
    }
    

    Call it:

    ArrivedDetails details = ArrivedDetails.CreateFromString(encrypted);
    
    0 讨论(0)
  • 2021-01-11 18:28

    What you want is a static factory method that creates the object you require.

    class ArrivedDetails
    {
    ///...
    
        public static ArrivedDetails CreateFromEncryptedKey(string encrypted)
        {
            return DataProtect.deserializeXML(DataProtect.DecryptData(encrypted));
        }
    ///...
    

    The reason your initial approach didn't work is because this is a private read-only instance field that returns the object from which it is called. You can't write to this.

    0 讨论(0)
  • 2021-01-11 18:38

    You can archive this with reflection as follows.

    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 assigns the deserialized object to a temporal variable, and copy the value in each public property to this with reflection. This snippet avoids to copy properties with the XmlIgnore attribute.

    0 讨论(0)
提交回复
热议问题