В зависимости от того, что вы делаете, вам может быть проще создавать классы моделей для вашего JSON и сериализовать их, чем вручную кодировать JSON с помощью JsonWriter
.
Вы можете создавать классы моделей, копируяобразец желаемого JSON в буфер обмена (чем больше заполнено, тем лучше), а затем в Visual Studio с помощью функции Edit -> Paste Special -> Paste JSON as Classes
.Имейте в виду, что эта функция не генерирует свойства массива правильно, поэтому вам нужно будет их вручную исправить.Вы можете изменить имена классов так, как вам хочется.Имена свойств должны совпадать с тем, что вы хотите в выводе JSON, если вы не украсили их атрибутом <JsonProperty>
, указывающим альтернативное имя для использования в JSON.
С вашим примером JSON я сгенерировал следующие классы моделей:
Public Class Rootobject
Public Property cilist As List(Of Cilist)
End Class
Public Class Cilist
Public Property id As String
Public Property className As String
Public Property attributeMap As Attributemap
End Class
Public Class Attributemap
Public Property HomeCell As String
Public Property PNReadAcl As String
Public Property WriteSecurity As String
Public Property PNWriteAcl As String
Public Property DATABASE_event_max_sev As String
Public Property PriorityWatchdog As String
Public Property UsingOrganization As String
Public Property OwnerContact As String
Public Property Domain As String
Public Property status As String
Public Property maintenance_mode As String
Public Property schedule_status As String
Public Property HostName As String
Public Property manual_status As String
Public Property root_causes As String
Public Property computed_priority As String
Public Property DeviceID As String
Public Property impacting_open_event_max_sev As String
Public Property InstanceId As String
Public Property USER_TRANSACTIONS_event_max_sev As String
Public Property ImpactCostPerSecOut As String
Public Property APPLICATION_event_max_sev As String
Public Property SYSTEM_event_max_sev As String
Public Property Company As String
Public Property OwnerName As String
Public Property Description As String
Public Property sub_status As String
Public Property UsingOrganizationId As String
Public Property any_event_max_sev As String
Public Property Priority As String
Public Property Name As String
Public Property publish_env_id As String
Public Property mc_udid As String
Public Property ReadSecurity As String
Public Property PrimaryCapability As String
End Class
Обратите внимание, что свойство cilist
в классе Rootobject
изначально было сгенерировано неправильно, как показано ниже:
Public Property cilist() As Cilist
И я вручную исправил его следующим образом:
Public Property cilist As List(Of Cilist)
Чтобы создать JSON оттуда, достаточно просто заполнить модели и сериализовать их:
Dim obj As New Rootobject With
{
.cilist = New List(Of Cilist) From
{
New Cilist With
{
.id = "bppmwsserver_6",
.className = "BMC_ComputerSystem",
.attributeMap = New Attributemap With
{
.HomeCell = "pncell_bppmwsserver",
.PNReadAcl = "[]",
.WriteSecurity = "[Full Access]",
.PNWriteAcl = "[]",
.DATABASE_event_max_sev = "OK",
.PriorityWatchdog = "NO",
.UsingOrganization = "",
.OwnerContact = "",
.Domain = "calbro.com",
.status = "OK",
.maintenance_mode = "NO",
.schedule_status = "IN",
.HostName = "bppmwsserver",
.manual_status = "NONE",
.root_causes = "[]",
.computed_priority = "PRIORITY_5",
.DeviceID = "1",
.impacting_open_event_max_sev = "OK",
.InstanceId = "",
.USER_TRANSACTIONS_event_max_sev = "OK",
.ImpactCostPerSecOut = "0.000000e+000",
.APPLICATION_event_max_sev = "OK",
.SYSTEM_event_max_sev = "OK",
.Company = "",
.OwnerName = "",
.Description = "Test CI",
.sub_status = "NONE",
.UsingOrganizationId = "-1",
.any_event_max_sev = "OK",
.Priority = "PRIORITY_5",
.Name = "bppmwsserver.calbro.com",
.publish_env_id = "",
.mc_udid = "bppmwsserver_6",
.ReadSecurity = "[Full Access]",
.PrimaryCapability = "Server"
}
}
}
}
Dim json As String = JsonConvert.SerializeObject(obj, Formatting.Indented)
Вот рабочий пример: https://dotnetfiddle.net/9xA8Hf