Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# Json JsonConvert反序列化错误_C#_Json_Json Deserialization - Fatal编程技术网

C# Json JsonConvert反序列化错误

C# Json JsonConvert反序列化错误,c#,json,json-deserialization,C#,Json,Json Deserialization,我已经成功地使用Newtonsoft.Jsonconverter序列化对象序列化了一个复杂对象(包含抽象类、只读属性)。 当尝试使用DeserializeObject方法对其进行反序列化时,它抛出以下错误 -已添加具有此键的项目。 在进一步的调查中,我发现这个对象中可能有一些同名的属性。但我在反序列化的json文件中找不到任何重复的属性名 NewtonSoft Json:8.0.3版本您好,我试图复制您的错误,但实际上我得到了一个成功的结果。这是我做的测试: using Newtonsoft.J

我已经成功地使用Newtonsoft.Jsonconverter序列化对象序列化了一个复杂对象(包含抽象类、只读属性)。 当尝试使用DeserializeObject方法对其进行反序列化时,它抛出以下错误 -已添加具有此键的项目。 在进一步的调查中,我发现这个对象中可能有一些同名的属性。但我在反序列化的json文件中找不到任何重复的属性名


NewtonSoft Json:8.0.3版本

您好,我试图复制您的错误,但实际上我得到了一个成功的结果。这是我做的测试:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var child = new Child();
            var serializesObject = JsonConvert.SerializeObject(child);

            var deserializedObject = JsonConvert.DeserializeObject(serializesObject, typeof(Child));
        }        
    }

    public abstract class Abstract
    {
        public int Prop1 { get; set; }
        public readonly string Prop2;
        public List<string> Prop3 { get; set; }
        public int[] Prop4 { get; set; }

        public abstract void Hey();

        public Abstract()
        {
            Prop1 = 1;
            Prop2 = "2";
            Prop3 = new List<string>();
            Prop4 = new int[4];
        }
    }

    public class Child : Abstract
    {
        public readonly string Prop5;

        public Child()
        {
            Prop5 = "5";

        }
        public override void Hey()
        {
            throw new NotImplementedException();
        }
    }
}
使用Newtonsoft.Json;
使用制度;
使用System.Collections.Generic;
命名空间控制台应用程序
{
班级计划
{
静态void Main(字符串[]参数)
{
var child=new child();
var serializesObject=JsonConvert.SerializeObject(子对象);
var deserializedObject=JsonConvert.DeserializeObject(serializesObject,typeof(Child));
}        
}
公共抽象类抽象
{
公共int Prop1{get;set;}
公共只读字符串Prop2;
公共列表Prop3{get;set;}
公共int[]Prop4{get;set;}
公开摘要无效();
公开摘要()
{
Prop1=1;
Prop2=“2”;
Prop3=新列表();
Prop4=新整数[4];
}
}
公共类儿童:摘要
{
公共只读字符串Prop5;
公共儿童()
{
Prop5=“5”;
}
公共覆盖无效()
{
抛出新的NotImplementedException();
}
}
}
我希望这段代码可以帮助您达到您想要的预期结果


干杯,

嗨,我试图复制你的错误,但实际上我得到了一个成功的结果。这是我做的测试:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var child = new Child();
            var serializesObject = JsonConvert.SerializeObject(child);

            var deserializedObject = JsonConvert.DeserializeObject(serializesObject, typeof(Child));
        }        
    }

    public abstract class Abstract
    {
        public int Prop1 { get; set; }
        public readonly string Prop2;
        public List<string> Prop3 { get; set; }
        public int[] Prop4 { get; set; }

        public abstract void Hey();

        public Abstract()
        {
            Prop1 = 1;
            Prop2 = "2";
            Prop3 = new List<string>();
            Prop4 = new int[4];
        }
    }

    public class Child : Abstract
    {
        public readonly string Prop5;

        public Child()
        {
            Prop5 = "5";

        }
        public override void Hey()
        {
            throw new NotImplementedException();
        }
    }
}
使用Newtonsoft.Json;
使用制度;
使用System.Collections.Generic;
命名空间控制台应用程序
{
班级计划
{
静态void Main(字符串[]参数)
{
var child=new child();
var serializesObject=JsonConvert.SerializeObject(子对象);
var deserializedObject=JsonConvert.DeserializeObject(serializesObject,typeof(Child));
}        
}
公共抽象类抽象
{
公共int Prop1{get;set;}
公共只读字符串Prop2;
公共列表Prop3{get;set;}
公共int[]Prop4{get;set;}
公开摘要无效();
公开摘要()
{
Prop1=1;
Prop2=“2”;
Prop3=新列表();
Prop4=新整数[4];
}
}
公共类儿童:摘要
{
公共只读字符串Prop5;
公共儿童()
{
Prop5=“5”;
}
公共覆盖无效()
{
抛出新的NotImplementedException();
}
}
}
我希望这段代码可以帮助您达到您想要的预期结果


干杯,

你能发布相关的代码片段吗,也许是Json的例子。你能详细介绍一下你的尝试吗。下面是一些相关的查询,可能会对您有所帮助。您可以发布代码,或者检查您的类是否在基类中存在同名属性,如果是这样,请使用new关键字在您的类中隐藏这些属性。我的类结构如下ClassXyz:BaseClas1,IClonable BasClass1:BaseClass2,BaseClass2是一个抽象的calss。所有这些类(ClassXyz、BaseClass1和BaseClass2)都包含一些其他类类型的属性。此外,很少有属性是只读的。形成该对象所涉及的类的总数是12。(作为属性、派生类、基类等)我使用Newtonsoft.Json将该对象序列化为Json。它确实成功地转换为json。在将json转换回.net对象时,我遇到了描述中提到的错误。您能否发布相关的代码片段,可能是json的示例。您能否详细说明您尝试过的内容。下面是一些相关的查询,可能会对您有所帮助。您可以发布代码,或者检查您的类是否在基类中存在同名属性,如果是这样,请使用new关键字在您的类中隐藏这些属性。我的类结构如下ClassXyz:BaseClas1,IClonable BasClass1:BaseClass2,BaseClass2是一个抽象的calss。所有这些类(ClassXyz、BaseClass1和BaseClass2)都包含一些其他类类型的属性。此外,很少有属性是只读的。形成该对象所涉及的类的总数是12。(作为属性、派生类、基类等)我使用Newtonsoft.Json将该对象序列化为Json。它确实成功地转换为json。在将json转换回.net对象时,我遇到了描述中提到的错误。但问题仍然存在。如果我们有一个名为“RuntimeInfo”的属性,那么在反序列化时会出现任何问题吗?此属性的类型为RuntimeInfo类。如果我将此属性重命名为RuntimeInfo1,它将成功反序列化。有人能告诉我如何找到字典中重复的键,这导致反序列化过程中“已添加具有此键的项”。Hi@Kaveesha,此类RuntimeInfo来自何处?但问题仍然存在。如果我们有一个名为“RuntimeInfo”的属性,那么在反序列化时会出现任何问题吗?此属性的类型为RuntimeInfo类。如果我将此属性重命名为RuntimeInfo1,它将成功反序列化。有人能告诉我如何在反序列化过程中找到字典中重复的键,从而导致“已添加具有此键的项”。Hi@Kaveesha,此类RuntimeInfo来自何处?