2015-09-01 126 views
1

我在使用從控制器發送的對象來查看使用Json時遇到了問題。使用Jquery/Javascript閱讀NewtonSoft Json數據

我使用NewtonSoft.Json 7.x.x將對象列表發送到視圖以將列表序列化爲Json。我使用下面的代碼序列化:

return JsonConvert.SerializeObject(DataToSend, Formatting.None, new JsonSerializerSettings() 
     { 
      ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
     }); 

我有2個實體類: 1)表 2)FormFields

有這兩個實體之間存在1對多的關係。

public class Form 
{ 
    public long ID { get; set; } 
    public string Name { get; set; } 
    public virtual List<FormField> FormFields { get; set; } 
} 

public class FormField 
{ 
    public long FormID { get; set; } 
    public string FieldLabel { get; set; } 
    public string FieldType { get; set; } 
    public string FieldValue { get; set; } 
    public virtual Form form { get; set; } 
} 

我想將FormField列表發送到使用Javascript進行呈現的視圖。我可以使用上面的serializaton方法發送它。

但問題是,當我收到Javascript中的對象數組。它有Json引用對象ID。我無法正常訪問這些對象。

我能夠呈現該數組中的第一個FormField值,但我無法渲染其餘部分。它是未定義的。

我附上了我在UI上收到的JSON對象值的屏幕截圖。你可以看到有一個Object數組。每個對象都應該有FormField類型的對象,並且應該有該字段的值,但是沒有。

只有索引爲0的對象具有值,其餘索引只有參考ID。

Json Object Values

請幫我解決這個問題。

感謝

+0

你能給序列化JSON對象,您可以在視圖得到的例子嗎? Json引用對象ID是什麼意思。 – Dandy

+0

當然,我會用示例json數據更新我的帖子....感謝您的回覆.... –

回答

0

我不知道,如果是最好的解決辦法或沒有,但我張貼這樣也許可以挽救別人的鬥爭,以找到解決方案。

我管理使用.NET擴展庫插件。我用System.Web.Extension DLL代替Newtonsoft.Json

我把屬性ScriptIgnore在我的模型爲:

public class Form 
{ 
    public long ID { get; set; } 
    public string Name { get; set; } 

    [ScriptIgnore] 
    public virtual List<FormField> FormFields { get; set; } 
} 

public class FormField 
{ 
    public long FormID { get; set; } 
    public string FieldLabel { get; set; } 
    public string FieldType { get; set; } 
    public string FieldValue { get; set; } 

    [ScriptIgnore] 
    public virtual Form form { get; set; } 
} 

然後,我與System.Web.Script.Serialization.JavaScriptSerializer連載它:

return new JavaScriptSerializer().Serialize(DataToSend); 

它將系列化所有數據,但它會忽略具有屬性ScriptIgnore的屬性,並且不會嘗試序列化它們。對我來說,它按要求工作。

剛剛纔知道NewtonSoft.Json提供的屬性JsonIgnore提供的功能與ScriptIgnore的功能相同。所以,如果您使用的是NewtonSoft Library,那麼您也可以使用它。

這是很好的瞭解有更多的方式來達到同樣的效果;)