2010-03-07 3 views
1

Так что я пытаюсь десериализовать объект со свойствами: $ ref и $ id. Я попытался перейти между Словарем, а также объектом, где я указал соглашения об именах через JsonPropertyAttribute. Сериализационные работы, но десериализация не. Ошибка, которую я продолжаю получать:

Дополнительный текст, найденный в строке JSON после завершения десериализации объекта.

Образец кода, где все три образца, сбой.

[Serializable] 
public class Ref 
{ 
    [JsonProperty(PropertyName = "$ref")] 
    public virtual string RefName { get; set; } 
    [JsonProperty(PropertyName = "$id")] 
    public virtual int Id { get; set; } 
} 

[Serializable] 
public class Child 
{ 
    public virtual string Name { get; set; } 
    [JsonProperty(IsReference = true)] 
    public virtual Ref Father { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     //Additional text found in JSON string after finishing deserializing object. 
     //Test 1 
     var reference = new Dictionary<string, object>(); 
     reference.Add("$ref", "Persons"); 
     reference.Add("$id", 1); 

     var child = new Dictionary<string, object>(); 
     child.Add("_id", 2); 
     child.Add("Name", "Isabell"); 
     child.Add("Father", reference); 

     var json = JsonConvert.SerializeObject(child); 
     var obj = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); //Exception 

     //Test 2 
     var refOrg = new Ref {RefName = "Parents", Id = 1}; 
     var refSer = JsonConvert.SerializeObject(refOrg); 
     var refDeser = JsonConvert.DeserializeObject<Ref>(refSer); //Exception 

     //Test 3 
     var childOrg = new Child {Father = refOrg, Name = "Isabell"}; 
     var childSer = JsonConvert.SerializeObject(childOrg); 
     var childDeser = JsonConvert.DeserializeObject<Child>(refSer); //Exception 
    } 
} 

ответ

2

Вы обнаружите, что $ref & $id специальные свойства, используемые Json.NET для управления несколькими экземплярами объектов в одном графе объектов.

Поставив эти ключи в словарь, процесс десериализации пытается проанализировать их как ссылки на объекты, которые не существуют.

Попробуйте изменить ключи.

3

У меня такая же проблема при попытке десериализовать документ схемы swagger/json. Раствор представляет собой:

JsonSerializerSettings settings = new JsonSerializerSettings(); 
settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; 

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

  • Нет связанных вопросов^_^