VB.net VB序列化JSON属性名称问题
我对JSON属性名有问题。可能是因为我不知道自己在做什么。这是我第一次尝试序列化JSON(使用vb.net vb) 我想要的结果是:VB.net VB序列化JSON属性名称问题,json,vb.net,Json,Vb.net,我对JSON属性名有问题。可能是因为我不知道自己在做什么。这是我第一次尝试序列化JSON(使用vb.net vb) 我想要的结果是: { "login": { "username": "XXX", "password": "pwxXXxx", "busId": "123456789", "busRole": "Third Party", "paymentTerms": "Prepaid" } } 这就是我得到的: [ {
{
"login": {
"username": "XXX",
"password": "pwxXXxx",
"busId": "123456789",
"busRole": "Third Party",
"paymentTerms": "Prepaid"
}
}
这就是我得到的:
[
{
"login": null,
"username": "1234",
"password": "pw123456",
"busId": "12345",
"busRole": "Third Party",
"paymentTerms": "Prepaid"
}
]
我的问题是“login”:{“添加了冒号和null。我将在下面发布我的代码
任何帮助都将不胜感激
-多谢各位
Partial Class _Default
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim loads As New List(Of fgtload)()
loads.Add(New fgtload() With {
.username = "1234",
.password = "pw123456",
.busId = "12345",
.busRole = "Third Party",
.paymentTerms = "Prepaid"
}
)
Dim strserialize As String = JsonConvert.SerializeObject(loads)
lblserial.Text = strserialize
End Sub
Public Class fgtload
<JsonProperty(PropertyName:="login")>
Public Property login As String
Public Property username() As String
Get
Return m_username
End Get
Set
m_username = Value
End Set
End Property
Private m_username As String
Public Property password() As String
Get
Return m_password
End Get
Set
m_password = Value
End Set
End Property
Private m_password As String
Public Property busId() As String
Get
Return m_busId
End Get
Set
m_busId = Value
End Set
End Property
Private m_busId As String
Public Property busRole() As String
Get
Return m_busRole
End Get
Set
m_busRole = Value
End Set
End Property
Private m_busRole As String
Public Property paymentTerms() As String
Get
Return m_paymentTerms
End Get
Set
m_paymentTerms = Value
End Set
End Property
Private m_paymentTerms As String
End Class
如何向包装器添加另一个类
Public Class fgtDetails '
Public ServiceClass As String
Public typeQuery As String
Public pickupDate As Integer
Public productCode As String
End Class
从我所看到的情况来看,您试图将login元素声明为空字符串,因此序列化为null。根据您所说的尝试实现,您希望将login声明为包含用户名、密码、BusID、BusRole和PaymentTerms属性的对象 从您要查找的内容来看,Login属性是一个对象,但您将其声明为字符串。此外,您正在创建一个列表并对其进行序列化,这将导致JSON周围的方括号([,])。方括号标记数组或枚举,而在示例JSON中,您只查找一个对象 最后一个技巧是,对于用于序列化的类,您不必使用属性。您可以将变量声明为公共变量。您需要使用属性的唯一时间是在设置或读取时是否需要修改或处理其内容。例如,在设置字符串时格式化字符串,或计算响应在检索变量时使用nse(您可以将代码放入GET和SET方法中,使它们像函数一样工作) 序列化和反序列化需要注意的是,您可以嵌套类。序列化后,它们将使用相同的对象布局和变量名转换为JSON对象。因此,您可以尝试以下操作: (更新代码) 这就产生了这种反应。 (最新产出) 希望这有帮助 (更新说明): 为了响应您的评论,我修改了响应中的代码,以允许或更新您的预期输出 还要注意,如果两个JSON对象具有相同的结构(在本例中为originLocation和destinationLocation),则可以使用相同的类
此外,请参见商品数据中的方括号,这表示一个JSON数组。代码中的数组/列表/枚举将序列化为JSON数组,即使它们是类类型。因此,在本代码示例中,您可以根据需要向ListOfCommodities.Commodity添加任意数量的商品,并将它们正确序列化为JSON。 从我所看到的情况来看,您试图将login元素声明为空字符串,因此序列化为null。根据您所说的尝试实现,您希望将login声明为包含用户名、密码、BusID、BusRole和PaymentTerms属性的对象 从您要查找的内容来看,Login属性是一个对象,但您将其声明为字符串。此外,您正在创建一个列表并对其进行序列化,这将导致JSON周围的方括号([,])。方括号标记数组或枚举,而在示例JSON中,您只查找一个对象 最后一个技巧是,对于用于序列化的类,您不必使用属性。您可以将变量声明为公共变量。您需要使用属性的唯一时间是在设置或读取时是否需要修改或处理其内容。例如,在设置字符串时格式化字符串,或计算响应在检索变量时使用nse(您可以将代码放入GET和SET方法中,使它们像函数一样工作) 序列化和反序列化需要注意的是,您可以嵌套类。序列化后,它们将使用相同的对象布局和变量名转换为JSON对象。因此,您可以尝试以下操作: (更新代码) 这就产生了这种反应。 (最新产出) 希望这有帮助 (更新说明): 为了响应您的评论,我修改了响应中的代码,以允许或更新您的预期输出 还要注意,如果两个JSON对象具有相同的结构(在本例中为originLocation和destinationLocation),则可以使用相同的类
此外,请参见商品数据中的方括号,这表示一个JSON数组。代码中的数组/列表/枚举将序列化为JSON数组,即使它们是类类型。因此,在本代码示例中,您可以根据需要向ListOfCommodities.Commodity添加任意数量的商品,并将它们正确序列化为JSON。Y这非常有帮助。非常感谢您花时间回答并详细解释。为了简洁起见,我在示例中添加了一个短端JSON输出。我总共可以构造5个类。我尝试向包装器添加一个细节类,但失败了。我认为没有足够的字符来放置整个exp此处为ected输出。公共类详细信息的公共服务类为字符串公共类型查询为字符串公共pickupDate为整数公共产品代码为字符串结束类Daniel,再次感谢您。从您添加的最后4个类中,我发现我走错了方向。我试图将它们添加到fgtload中课堂。如前所述,我对所有这些都有点陌生。我非常感谢课程、帮助和优秀的解释代码。再次非常感谢。我不确定如何或是否必须将此标记为已接受的答案。如果这是一个分配点的网站或什么。我将环顾四周,看看是否可以找到答案,因为这就是答案我一直在寻找并希望:)。谢谢当悬停在回复顶部时,你应该会看到一个灰色的勾号,单击它,它会将其标记为已接受的答案。这几乎也适用于stack overflow的所有其他网站。Shimmy你还在吗?是的,我还在,dashley怎么了?是的,我在
Public Class fgtDetails '
Public ServiceClass As String
Public typeQuery As String
Public pickupDate As Integer
Public productCode As String
End Class
Public Sub CreateJson()
'Create Wrapper Object
Dim Load As New fgtload
Load.Login = New fgtLoginData With { 'Create Login Data
.Username = "XXX",
.Password = "pwxXXxx",
.BusID = 123456789,
.BusRole = "Third Party",
.PaymentTerms = "Prepaid"
}
Load.Details = New fgtDetailsData With { 'Create Details
.ServiceClass = "STD",
.TypeQuery = "QUOTE",
.PickupDate = "20200221",
.ProductCode = "DFQ"
}
Load.OriginLocation = New fgtLocationnData With { 'Create Origin
.City = "Keyport",
.State = "NJ",
.PostalCode = 7735,
.Country = "USA",
.LocationType = "COMM"
}
Load.DestinationLocation = New fgtLocationnData With { 'Create Destination
.City = "Beverly Hills",
.State = "CA",
.PostalCode = 90210,
.Country = "USA",
.LocationType = "COMM"
}
'Create Commodities
Dim Commodity1 As New fgtCommodity With {
.PackageLength = 48,
.PackageWidth = 48,
.PackageHeight = 48,
.Weight = 1500,
.HandlingUnits = 1,
.PackageCode = "PLT"
}
'Add commodity to load
Load.ListOfCommodities.commodity.Add(Commodity1)
'Serialize wrapper object
Dim Json As String = JsonConvert.SerializeObject(Load)
End Sub
Public Class fgtload 'Primary wrapper
Public Login As New fgtLoginData
Public Details As New fgtDetailsData
Public OriginLocation As New fgtLocationnData
Public DestinationLocation As New fgtLocationnData
Public ListOfCommodities As New fgtCommodityWrapper
End Class
Public Class fgtLoginData 'Login Data
Public Username As String
Public Password As String
Public BusID As String
Public BusRole As String
Public PaymentTerms As String
End Class
Public Class fgtDetailsData 'Details Data
Public ServiceClass As String
Public TypeQuery As String
Public PickupDate As String
Public ProductCode As String
End Class
Public Class fgtLocationnData 'Location data for both Origin and Destination
Public City As String
Public State As String
Public PostalCode As String
Public Country As String
Public LocationType As String
End Class
Public Class fgtCommodityWrapper 'Commodity Data
Public commodity As New List(Of fgtCommodity) ' Lists get serialized into arrays
End Class
Public Class fgtCommodity
Public PackageLength As Double 'Doubles to allow floating-point numbers
Public PackageWidth As Double
Public PackageHeight As Double
Public Weight As Double
Public HandlingUnits As Integer
Public PackageCode As String
End Class
{
"Login": {
"Username": "XXX",
"Password": "pwxXXxx",
"BusID": "123456789",
"BusRole": "Third Party",
"PaymentTerms": "Prepaid"
},
"Details": {
"ServiceClass": "STD",
"TypeQuery": "QUOTE",
"PickupDate": "20200221",
"ProductCode": "DFQ"
},
"OriginLocation": {
"City": "Keyport",
"State": "NJ",
"PostalCode": "7735",
"Country": "USA",
"LocationType": "COMM"
},
"DestinationLocation": {
"City": "Beverly Hills",
"State": "CA",
"PostalCode": "90210",
"Country": "USA",
"LocationType": "COMM"
},
"ListOfCommodities": {
"commodity": [
{
"PackageLength": 48.0,
"PackageWidth": 48.0,
"PackageHeight": 48.0,
"Weight": 1500.0,
"HandlingUnits": 1,
"PackageCode": "PLT"
}
]
}
}