2012-02-03 79 views
0

我有一個對象,它看起來是這樣的:Newtonsoft JsonConvert,覆蓋當前的IEnumerable項目

Public Class ExportOptions 

     Public Sub New() 
      CategoryIDs = {New Guid("30ndd837-7a2c-477c-b892-67f129f7af4e")} 
     End Sub 

     Property CategoryIDs As IEnumerable(Of Guid) 

    End Class 

然後我反序列化JSON像這樣:

Newtonsoft.Json.JsonConvert.DeserializeObject(Of ExportOptions)(JSONString) 

問題是在價值觀JSON沒有進入CategoryIDs屬性?相反,我只剩下構造函數中使用的單個值。

如果我改變CategoryIDs到一個List(GUID的),那麼新categoryIDs被添加到列表中,當我需要他們來覆蓋當前的項目。

在構造函數中添加的值是一個默認值,並且在客戶端沒有傳遞任何東西的情況下必須存在。

回答

1

管理到底工作了這一點我自己: -

  Newtonsoft.Json.JsonConvert.DeserializeObject(Of AmazonSimpleExportOptions)(JSONString, 
                         New Newtonsoft.Json.JsonSerializerSettings With { 
                          .ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace}) 
0
Public Class ExportOptions 

     Private defaultGuid As New Guid("30ndd837-7a2c-477c-b892-67f129f7af4e") 
     Private cats as List(Of Guid) = {defaultGuid} 

     Public Sub New() 

     End Sub 

     Property CategoryIDs As List(Of Guid) 
      Get 
       Return cats 
      End Get 

      Set(ByVal Value As List(Of Guid)) 
       cats = Value 
       If cats.Count = 0 Then cats.Add(defaultGuid) 
      End Set 
     End Property 
End Class 
+0

感謝羅伊,這是我目前回落的解決方案。因爲實際的解決方案使用接口,並且在整個解決方案中會有許多這樣的類以及不同的列表,所以儘可能自動化會很好! – pingoo 2012-02-03 15:11:57

+0

@ Rene147如果你不想碰序列化類可行的替代方案:不是默認加入的項目列表,訪問它使用CategoryIDs.DefaultIfEmpty(新的GUID(「30ndd837-7a2c-477C-b892-67f129f7af4e時「)) – 2012-02-03 15:15:31