Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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/2/.net/24.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# JsonConvert.SerializeObject()在使用DateTime字段序列化类时失败_C#_.net_C# 4.0_Json.net - Fatal编程技术网

C# JsonConvert.SerializeObject()在使用DateTime字段序列化类时失败

C# JsonConvert.SerializeObject()在使用DateTime字段序列化类时失败,c#,.net,c#-4.0,json.net,C#,.net,C# 4.0,Json.net,我有一个只有私有字段和它们的公共getter setter的类。我需要将类对象转换为JSON字符串,因此我使用的是JSON.Net 下面是将类对象转换为JSON字符串的简单代码段 MyClass obj = new MyClass(); string json = JsonConvert.SerializeObject(obj); Console.WriteLine(json); 但是方法SerializeObject在类型为DateTime的MyClass的字段中抛出StackOverflo

我有一个只有私有字段和它们的公共getter setter的类。我需要将类对象转换为JSON字符串,因此我使用的是JSON.Net

下面是将类对象转换为JSON字符串的简单代码段

MyClass obj = new MyClass();
string json = JsonConvert.SerializeObject(obj);
Console.WriteLine(json);
但是方法
SerializeObject
在类型为
DateTime
MyClass
的字段中抛出
StackOverflowException
。这里发生了什么事

更新

下面是
MyClass
的样子(事实上,我不介意共享实际的类)

另外,我还有另一个类,它将有
MyClass
类型字段(以及它自己类似的字段集),它也将被转换为JSON字符串,这应该不会是一个问题,因为JSON.Net据说也支持这种情况


注意:我不熟悉C#但我以前在Java中使用过JSON,在Java中我可以使用
JSONObject
JSONArray
,它们非常直接。

看起来您的TestEndTime属性的getter引用本身就是如此。因此,当Json.NET尝试序列化它时,它会递归地访问自身并导致StackOverflowException


希望有帮助

您能给我们看一下MyClass吗?非常感谢!!这正是问题所在,我已经为
TestEndTime
创建了私有字段,并为其创建了类似的getter setter,现在运行良好。我认为从3.0开始,如果没有特定的私有变量原因,最好在C#中使用auto属性。使用该方法不会发生这种类型的键入错误。
    class MyClass
    {
        private int _Model;
        public int Model
        {
            get
            {
                return _Model;
            }
            set
            {
                _Model = value;
            }
        }

        private long _ProductionControlNumber;
        public long ProductionControlNumber
        {
            get
            {
                return _ProductionControlNumber;
            }
            set
            {
                _ProductionControlNumber = value;
            }
        }

        private DateTime _ProductionDate;
        public DateTime ProductionDate
        {
            get
            {
                return _ProductionDate;
            }
            set
            {
                _ProductionDate = value;
            }
        }

        private DateTime _TestDate;
        public DateTime TestDate
        {
            get
            {
                return _TestDate;
            }
            set
            {
                _TestDate = value;
            }
        }

        private DateTime _TestStartTime;
        public DateTime TestStartTime
        {
            get
            {
                return _TestStartTime;
            }
            set
            {
                _TestStartTime = value;
            }
        }

        private TimeSpan _TestDuration;
        public TimeSpan TestDuration
        {
            get
            {
                return _TestDuration;
            }
            set
            {
                _TestDuration = value;
            }
        }

        public DateTime TestEndTime
        {
            get
            {
                //TODO Perform start end time computing logic.
                return TestEndTime;
            }
        }

        private int _TestBed;
        public int TestBed
        {
            get
            {
                return _TestBed;
            }
            set
            {
                _TestBed = value;
            }
        }

        private long _EngineSerial;
        public long EngineSerial
        {
            get
            {
                return _EngineSerial;
            }
            set
            {
                _EngineSerial = value;
            }
        }

        private Single _FuelSpecificGravity;
        public Single FuelSpecificGravity
        {
            get
            {
                return _FuelSpecificGravity;
            }
            set
            {
                _FuelSpecificGravity = value;
            }
        }

        private long _FuelConsume100;
        public long FuelConsume100
        {
            get
            {
                return _FuelConsume100;
            }
            set
            {
                _FuelConsume100 = value;
            }
        }

        private long _FuelConsume110;
        public long FuelConsume110
        {
            get
            {
                return _FuelConsume100;
            }
            set
            {
                _FuelConsume100 = value;
            }
        }

        private int _TemporaryRPM;
        public int TemporaryRPM
        {
            get
            {
                return _TemporaryRPM;
            }
            set
            {
                _TemporaryRPM = value;
            }
        }

        private int _PermanentRPM;
        public int PermanentRPM
        {
            get
            {
                return _PermanentRPM;
            }
            set
            {
                _PermanentRPM = value;
            }
        }

        private Single _RatedPower;
        public Single RatedPower
        {
            get
            {
                return _RatedPower;
            }
            set
            {
                _RatedPower = value;
            }
        }

        private int _RatedSpeed;
        public int RatedSpeed
        {
            get
            {
                return _RatedSpeed;
            }
            set
            {
                _RatedSpeed = value;
            }
        }

        private double _PulleyDiameter;
        public double PulleyDiameter
        {
            get
            {
                return _PulleyDiameter;
            }
            set
            {
                _PulleyDiameter = value;
            }
        }

        private double _RopeDiameter;
        public double RopeDiameter
        {
            get
            {
                return _RopeDiameter;
            }
            set
            {
                _RopeDiameter = value;
            }
        }

        private Single _FullLoad;
        public Single FullLoad
        {
            get
            {
                return _FullLoad;
            }
            set
            {
                _FullLoad = value;
            }
        }
    }