2012-06-15 58 views
9

好吧 - 現在幾個小時,我一直在毆打我的頭。有時間尋求幫助。Newtonsoft json序列化程序返回空對象

我剛剛將我的Web應用程序項目升級到ASP.NET MVC 4 RC和新的WebApi。 我的web api方法現在正在返回EMPTY json「{}」 - 即使我的對象已完全填充。

我用我自己的MediaTypeFormatter替換了序列化程序,該程序也調用了Newtonsoft Json序列化程序,這樣我就可以掛接並查看正常工作。 我看到的是一個進入序列化器的對象,並以「{}」出現。

這用於升級之前工作。

這是我的目標

[Serializable] 
public class Parameters 
{ 
    public string ApplicantName { get; set; } 
} 

,我只是呼籲:

var result = JsonConvert.SerializeObject(new Parameters(){ Name = "test" }); 

我回來

"{}" 

回事請告訴我?

[編輯]

別人有同樣的問題......通過Newtonsoft源代碼運行後,我可以看到我們從最近的變化具有完全相同的問題。

http://json.codeplex.com/discussions/357850

回答

5

好了 - 已經有不少的變化,結果是到JSON輸出一些非常激進的變化。這些更改還包括如何應用自定義TypeConverters。

我寫了一個基本的解析器實現了(至少對我們來說)會導致Newtonsoft串行的行爲更像是一個基本的序列化對象序列化 - 即串行化的所有屬性,以及犯規的使用習慣類型轉換器...

/// <summary> 
/// A resolver that will serialize all properties, and ignore custom TypeConverter attributes. 
/// </summary> 
public class SerializableContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver 
{ 
    protected override IList<Newtonsoft.Json.Serialization.JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) 
    { 
     var properties = base.CreateProperties(type, memberSerialization); 

     foreach (var p in properties) 
      p.Ignored = false; 

     return properties; 
    } 

    protected override Newtonsoft.Json.Serialization.JsonContract CreateContract(Type objectType) 
    { 
     var contract = base.CreateContract(objectType); 

     if (contract is Newtonsoft.Json.Serialization.JsonStringContract) 
      return CreateObjectContract(objectType); 
     return contract; 
    } 
} 

*登記* 在你MvcApplication「的Application_Start」 ......

GlobalConfiguration.Configuration.Formatters 
    .JsonFormatter.SerializerSettings.ContractResolver = 
     new SerializableContractResolver() 
     { 
      IgnoreSerializableAttribute = true 
     }; 
+0

謝謝你,這個答案幫我解決辦法我JSON.NET串行的問題不序列化公共恰好有一個空字符串值的字符串屬性.....我需要它們包含在生成的JSON中,因爲javascript期望屬性存在 – 2012-09-07 14:21:26

+0

我應該怎麼做? –

+1

發佈更新了註冊詳細信息。 – Adam

相關問題