2016-06-06 3 views
1

Я сериализовал сложный объект (содержащий абстрактные классы, свойства только для чтения) с помощью Newtonsoft.Jsonconverter SerializeObject успешно. При попытке десериализовать то же, используя метод DeserializeObject, он выдает следующую ошибку: - Элемент с этим ключом уже добавлен. В ходе дальнейшего расследования выяснилось, что в объекте с таким же именем могут быть некоторые свойства. Но я не мог найти имя свойства, которое повторяется в json-файле, де-сериализованном.NewtonSoft.Json JsonConvert Deserialize error

Версия NewtonSoft Json: 8.0.3

+2

Можете ли вы разместить соответствующие фрагменты кода, возможно, примеры Json. – Peter4499

+0

Можете ли вы опубликовать код или проверить, что ваш класс может быть в базовом классе, существует такое же имя, если оно используется, чтобы скрыть это свойство в вашем классе с помощью нового ключевого слова. –

+0

Можете ли вы уточнить, что вы пробовали. Вот некоторые связанные запросы, которые могут быть полезны для вас https://stackoverflow.com/questions/22096427/can-i-make-a-strict-deserialization-with-newtonsoft-json?rq=1 https: // stackoverflow. com/questions/24147989/error-deserializing-a-json-string-in-a-composite-object? rq = 1 –

ответ

0

Привет я пытался повторить свою ошибку, но на самом деле то, что я получил, был успешный результат. это тест, который я сделал:

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(); 
     } 
    } 
} 

Я надеюсь, что этот код поможет вам достичь ожидаемого результата.

Cheers,

+0

Проблема все же сохраняется. Представляет ли он какую-либо проблему при де-сериализации, если у нас есть свойство с именем «RuntimeInfo»? это свойство имеет тип RuntimeInfo. Если я переименую это свойство в RuntimeInfo1, он будет успешно сериализован. – Kaveesha

+0

Может ли кто-нибудь сообщить мне, как я могу найти, какой ключ повторяется в моем словаре, который вызывает «Элемент с этим ключом уже добавлен» во время десериализации. – Kaveesha

+0

Привет @Kaveesha, откуда этот класс RuntimeInfo? – VictorB

Смежные вопросы