2010-03-07 69 views
1

所以我試圖反序列化一個具有屬性的對象:$ ref和$ id。我已經嘗試過Dictionary和一個對象,我通過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;