Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Net::反序列化+;从对象取消绑定_C#_Json.net - Fatal编程技术网

C# Net::反序列化+;从对象取消绑定

C# Net::反序列化+;从对象取消绑定,c#,json.net,C#,Json.net,Program.cs class MyObj { private int _Max; public object Max { get { return (int)_Max; } set { _Max = (int)value; } } } myobj1=新的MyObj(100); 字符串json=JsonConvert.

Program.cs

class MyObj
{
    private int _Max;
    public object Max
    {
        get
        {
            return (int)_Max;
        }
        set
        {
            _Max = (int)value;
        }
    }
}
myobj1=新的MyObj(100);
字符串json=JsonConvert.SerializedObject(obj1,格式化.缩进);
obj1.Max=200;
MyObj obj2=JsonConvert.DeserializeObject(obj1);
运行时,在对Max属性进行设置时,它在Program.CS(反序列化)的最后一行崩溃

Supremacy.exe中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理

为什么我的设置为200,但反序列化不起作用? 我进行了调试,尝试设置为obj2的200值是一个包含int的对象

如果max上没有设置程序,则Program.cs将正常运行

向我解释为什么以及如何修复它:)


PS:我使用box/unboxing是因为MyObj是层次结构的一部分,它可以是用作Max的任何基元类型。

来解决异常问题。使用
转换为32

MyObj obj1 = new MyObj(100);
string json = JsonConvert.SerializeObject(obj1, Formatting.Indented);
obj1.Max = 200;
MyObj obj2 = JsonConvert.DeserializeObject<MyObj>(obj1);
我认为出现这个问题是因为反序列化值后,编译器不知道它最初是否是整数。它只有以下字符串:

public object Max
{
    get
    {
        return (int)_Max;
    }
    set
    {
        _Max = Convert.ToInt32(value);
    }
}
因此,值100作为字符串使用。Net有一种防止机制,不允许装箱一种类型(例如decimal)和取消装箱到另一种类型(例如integer)。这里的强制转换是从字符串到整数的转换,因此也不允许这样做。更多详情请参阅

{
  "Max": 100
}