Instance validation error: * is not a valid value for *

瘦欲@ 提交于 2019-12-05 08:26:48
Yaugen Vlasau
[XmlIgnore]
public MyEnum EnumValueReal
{
    get { return _myEnum; }
    set { _myEnum = value; }
}

public string EnumValue
{
     get
     {
         return EnumValueReal.ToString();
     }

     set
     {
         MyEnum result = MyEnum.Unknown;
         Enum.TryParse(value, true, out result);

         EnumValueReal = result;
     }
}

Other way around would be to declare EnumValue as string and parse value in EnumValue property to MyEnum in another property (with custom logic). Another property should be marked as not serializable.

public string EnumValue
{
    get { return _myEnum; }
    set { _myEnum = value; }
}

[NonSerialized]
public MyEnum EnumValueTyped {
  get {
    MyEnum value;
    if (Enum.TryParse<MyEnum>(EnumValue, out value)) {
      return value;
    }
    return MyEnum.Unknown;
  }
  set {
    EnumValue = value.ToString();
  }
}

Sometimes what happens is we do not take the update of the dlls or the projects we are referring in the project after making changes to the later and hence the parameter added/deleted does not get detected, thus throwing the same issue. Hence better take the updated dll and proceed.Can be a silly mistake but often committed. All the best :)

IMHO the most 'appropriate' solution would be to make EnumValue property nullable - since error you are getting (and MyEnum.Unknown) implies that it is possible for this property not to have a value...

Code would look following:

public enum MyEnum
{
    Car,
    Bicycle,
    Boat
}

[Serializable()]
public class MyClass
{
    private string _id;
    private MyEnum? _myEnum;

    public string ID
    {
        get { return _id; }
        set { _id = value; }
    }

    public MyEnum? EnumValue
    {

        get { return _myEnum; }
        set { _myEnum = value; }
    }

    public MyClass(string id)
    {
        this._id = id;
    }

    public MyClass() : this("")
    {
    }
}

Yes, but you can't do it anymore with SerializableAttribute I think.

You should implement ISerializable and provide your own serializer/deserializer. You can use the default serializer (new BinaryFormatter().serializer() e.g), but you have to implement a custom deserialization.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!