Newtonsoft JsonConvert,覆盖当前的IEnumerable项目

时间:2012-02-03 13:55:51

标签: .net vb.net json.net

我有一个看起来像这样的对象:

    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属性?相反,我只剩下构造函数中使用的单个值。

如果我将CategoryID更改为List(Guid),那么当我需要覆盖当前项时,新的categoryID会添加到列表中。

构造函数中添加的值是默认值,如果客户端没有传递任何内容,则必须存在该值。

2 个答案:

答案 0 :(得分:1)

最终我自己管理这个: -

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

答案 1 :(得分: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