我有一个类Sale,它保存销售数据,然后在sale类中有一个属性,它是一个SaleItem类的列表。
Sale
-date
-SaleItems <-- List(Of SaleItem)
-totalSaleItem类
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 ClassSaleitem类
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))发布于 2015-09-29 07:10:26
谢谢你的贡献,碰巧dll编码器给了我解决方案。
我必须将Sale的Saleitems属性从Readonly更改为读/写属性
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-27 06:10:09
好的,下面是我的工作代码(用C#而不是VB)来证明这不是库中的bug:
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被设置为private,所以缺少了SaleItems。切换到public,它就在这里。如果不能访问setter,库如何设置值?
具有有效输出的代码:
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输出
2https://stackoverflow.com/questions/32723664
复制相似问题