Десериализовать, отредактировать и сохранить файл JSON

#asp.net #.net #json #vb.net #json.net

#asp.net #.net #json #vb.net #json.net

Вопрос:

Я использую Json.У нас с NET есть следующий файл JSON. Что я хочу сделать, так это иметь возможность добавлять новые и удалять существующие «неудобства» из файла и сохранять результат обратно.

   {
  "Name": "PACS",
  "StorageDirectory": "new password",
  "StorageCompression": false,
  "MaximumStorageSize": 0,
  "MaximumPatientCount": 0,
  "Plugins": [
    "C:/Orthanc/Plugins/"
  ],
  "PostgreSQL": {
    "EnableIndex": true,
    "EnableStorage": false,
    "Host": "127.0.0.1",
    "Port": 5432,
    "Database": "ort",
    "Username": "postgres",
    "Password": "77"
  },
  "HttpServerEnabled": true,
  "HttpPort": 8042,
  "HttpDescribeErrors": true,
  "HttpCompressionEnabled": true,
  "RegisteredUsers": {
    "ace": "bat67"
  },
  "DicomModalities" : {
    "Mod1" : {
        "AET": "INSTANCE-A",
        "Port": 123,
        "Host": "10.0.0.1",
        "AllowEcho": true,
        "AllowFind": false,
        "AllowMove": false,
        "AllowStore": false
    },

    "Mod2" : {
        "AET": "INSTANCE-B",
        "Port": 123,
        "Host": "10.0.0.1",
        "AllowEcho": true,
        "AllowFind": false,
        "AllowMove": false,
        "AllowStore": false
    }
},
  "DicomAlwaysAllowStore": false,
  "DicomCheckModalityHost": false,
  "DicomScuTimeout": 10,
  "Dictionary": {}
}
  

До сих пор я был в состоянии создать новый объект «DicomModalities» и сериализовать его, но могу выяснить, как добавить его в файл или удалить существующие объекты «DicomModalities», например «Mod1», «Mod2»

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim modality As Modality = New Modality()
        modality.AET = "AET"
        modality.Port = 111
        modality.Host = "22.66.77.88"
        modality.AllowEcho = False
        modality.AllowFind = True
        modality.AllowMove = False
        modality.AllowStore = True

        Dim output As String = JsonConvert.SerializeObject(modality)
        MsgBox(output)
    End Sub

    Public Class Modality
        Public Property AET As String
        Public Property Port As Integer
        Public Property Host As String
        Public Property AllowEcho As Boolean
        Public Property AllowFind As Boolean
        Public Property AllowMove As Boolean
        Public Property AllowStore As Boolean
    End Class
  

Любая помощь была бы очень признательна.

Комментарии:

1. Ваша проблема в том, что повторяющиеся данные (модальность) НЕ задаются набором [] вокруг начала и конца повторяющихся данных. В результате каждая модальность будет рассматриваться как отдельный объект класса, а НЕ повторяющийся набор данных. Эти данные с точки зрения json не являются массивом данных, но каждый экземпляр должен рассматриваться как новый и отдельный объект. Добавление новых узлов возможно, но вы уверены, что это правильный формат данных? В нынешнем виде у вас есть == MyModals. Неудобства. Mod1 == и == Мои модели. Неудобства. Mod2 ==

2. Вам нужны мои модели. Неудобства. Mods() (IList / массив) данных.

3. Как сказал @Albert D. Kallal, использование классов, Mod1 и Mod2 считаются свойствами DicomModalities . Вам придется изменить структуру классов, чтобы добавить новое свойство. Если этот JSON предназначен не для обмена данными, а для хранения, измените DicomModalities , чтобы его значением был словарь / Список / массив Modality классов.

4. Проблема в том, что DicomModalities НЕ окружен набором []. Таким образом, это не повторяющиеся данные. Говоря простым английским языком, это было бы похоже на создание новой таблицы с ОДНОЙ строкой. Требуется имя таблицы, и действительно сложно создать систему, в которой вы добавляете целую новую таблицу для ОДНОЙ строки данных. Если бы данные содержали набор скобок вокруг предполагаемых повторяющихся данных, это было бы легко. В Visual Studio добавьте новый класс, очистите его, а затем перейдите к вставке special. Выберите XML или JSON, и VS затем сгенерирует для вас объект класса. Вы видите, что Mod1 и Mode2 считаются классами sperate

5. Я полагаю, пользователь хочет, чтобы все было именно так — но это означает, что вы ищете тот же набор данных, что и тот же тип, но сохраняете эти данные в виде отдельных узлов (классов / таблиц) вместо того, что должно быть повторяющимися данными. Просто хочу убедиться, что этот клоунский беспорядок на родео действительно то, чего хочет постер, прежде чем публиковать уродливое решение.