2015-09-22 3 views
0

У меня есть класс Sale, который содержит данные о продажах, а затем у меня есть свойство в классе Sale, который является списком класса SaleItem.Ошибка кодировщика FastJson

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

SaleItem класс

SaleItem 
-productID 
-amt 
-qty 

при конвертировании в Json строку и отлажена печать на выходе. SaleItems не был закодирован, просто отсутствует.

Что я делаю неправильно, или это может быть ошибка?

EDIT

Продажа класса

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)) 
+0

Вы можете поделиться своим кодом? – aloisdg

+0

См. Edit – Smith

+0

Ок. Это не очень полезно. Можете ли вы поделиться ссылкой на lib fastJSON? – aloisdg

ответ

0

Спасибо за ваш вклад, случается так, что длл кодировщик дал мне решение

я должен изменить Saleitems недвижимость Продажи от Readonly до Read/Write property

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 

Thanks

0

Ok вот мой рабочий код (в C# не VB), чтобы оправдать, что это не ошибка из Lib:

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 отсутствует, потому что SaleItems установлен как private. Переключитесь на public, и вот оно. Если сеттер недоступен, как lib может установить значение?

Ваш код с действительным выходом:

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 
Смежные вопросы