0

販売データを保持する Sale クラスがあり、SaleItem クラスのリストである Sale クラスにプロパティがあります。

Sale
-date
-SaleItems <-- List(Of SaleItem)
-total

SaleItem クラス

SaleItem
-productID
-amt
-qty

Json文字列に変換し、印刷をデバッグして出力したとき。SaleItems はエンコードされていませんでした。単に欠落しています。

私は何を間違っていますか、これはバグでしょうか?

編集

販売クラス

Public Class Sale
    Private _Paid As Decimal
    Private _ListSaleItems As List(Of SaleItem)

    Public Sub New()
        ClearSaleItem()
    End Sub

    Public ReadOnly Property SaleItems() As List(Of SaleItem)
        Get
            Return _ListSaleItems
        End Get
    End Property


    Public Property Paid() As Decimal
        Get
            Return _Paid
        End Get
        Set
            _Paid = value
        End Set
    End Property


    Public Sub ClearSaleItem()
        _ListSaleItems = New List(Of SaleItem)()
    End Sub


    Public Function AddSaleItem(value As SaleItem) As Decimal
        If value Is Nothing Then
            Throw New ApplicationException("SaleItem cannot be empty")
        End If
        _ListSaleItems.Add(value)
    End Function
End Class

Saleitem クラス

Public Class SaleItem
    Private _ID As Int32
    Private _Quantity As Int32
    Private _SellPrice As Decimal


    Public Sub New()
        _Quantity = 0
        _SellPrice = 0
    End Sub

    Public Property SellPrice() As Decimal
        Get
            Return _SellPrice
        End Get
        Set
            _SellPrice = value
        End Set
    End Property

    Public Property Quantity() As Int32
        Get
            Return _Quantity
        End Get
        Set
            _Quantity = value
        End Set
    End Property

End Class

変換に使用しているコードは

sockClient.Send(fastJSON.JSON.ToJSON(ObjSales))
4

2 に答える 2

0

これがlibのバグではないことを正当化するための私の作業コード(VBではなくC#)です:

namespace TestFastJson
{
    internal class Program
    {
            private static void Main()
            {
                    var sale = new Sale
                    {
                        SaleItems = new List<SaleItem>
                        {
                            new SaleItem(),
                            new SaleItem()
                        }
                    };

                    string jsonText = fastJSON.JSON.ToJSON(sale);

                    var newobj = fastJSON.JSON.ToObject<Sale>(jsonText);

                    Console.WriteLine(newobj.SaleItems.Count);
            }
    }

    public class Sale
    {
            public DateTime Date { get; set; }
            public List<SaleItem> SaleItems { get; set; }
            public int Total { get; set; }
    }

    public class SaleItem
    {
            public string ProductId { get; set; }
            public int Amount { get; set; }
            public string Quality { get; set; }
    }
}

出力

2

今あなたのコードのために。AddSaleItem()を返すのはなぜDecimalですか? そしてはとして設定されてSaleItemsいるため、欠落しています。に切り替えて、ここにあります。セッターにアクセスできない場合、ライブラリはどのように値を設定できますか?SaleItemsprivatepublic

有効な出力を含むコード:

    Friend Class Program
        Private Shared Sub Main()
            Dim sale = New Sale()
            sale.AddSaleItem(New SaleItem())
            sale.AddSaleItem(New SaleItem())

            Dim jsonText As String = fastJSON.JSON.ToJSON(sale)

            Console.WriteLine(jsonText)

            Dim newobj = fastJSON.JSON.ToObject(Of Sale)(jsonText)
            Console.WriteLine(newobj.SaleItems.Count)
        End Sub
    End Class

    Public Class SaleItem
        Private _ID As Int32

        Public Sub New()
            Me.Quantity = 0
            Me.SellPrice = 0
        End Sub

        Public Property SellPrice() As Decimal
            Get
                Return m_SellPrice
            End Get
            Set
                m_SellPrice = Value
            End Set
        End Property
        Private m_SellPrice As Decimal
        Public Property Quantity() As Integer
            Get
                Return m_Quantity
            End Get
            Set
                m_Quantity = Value
            End Set
        End Property
        Private m_Quantity As Integer
    End Class

    Public Class Sale
        Public listSaleItems As List(Of SaleItem)
        Public Sub New()
            Me.ClearSaleItem()
        End Sub

        Public ReadOnly Property SaleItems() As List(Of SaleItem)
            Get
                Return Me.listSaleItems
            End Get
        End Property

        Public Property Paid() As Decimal
            Get
                Return m_Paid
            End Get
            Set
                m_Paid = Value
            End Set
        End Property
        Private m_Paid As Decimal

        Public Sub ClearSaleItem()
            Me.listSaleItems = New List(Of SaleItem)()
        End Sub

        Public Sub AddSaleItem(value As SaleItem)
            If value Is Nothing Then
                Throw New ApplicationException("SaleItem cannot be empty")
            End If
            Me.listSaleItems.Add(value)
        End Sub
    End Class

出力

2
于 2015-09-27T06:10:09.020 に答える
0

あなたの貢献に感謝します.dllコーダーが私に解決策を与えてくれました.

Sale の Saleitems プロパティを Readonly から Read/Write プロパティに変更する必要があります

Public Property SaleItems() As List(Of SaleItem)
            Get
                Return Me.listSaleItems
            End Get
Set(value as List(Of SaleItem))
                listSaleItems = value 
            End Get
        End Property

ありがとう

于 2015-09-29T07:10:26.707 に答える