Что такое граф объектов и как его сериализовать

Более простым решением для управления только лямбдами является использование AWS Chalice . Он может создавать триггеры Lambdas, API Gateway, CloudWatch. Он также может создавать триггеры для SQS и SNS для ваших функций Lambda, но не может , а не создавать очереди SQS или темы SNS.

Таким образом, вы можете развертывать Lambdas постепенно. Инструменты CD также могут быть настроены для автоматического развертывания.

39
задан Sergey K. 9 November 2012 в 19:51
поделиться

3 ответа

Граф объектов - это не отдельный объект, а скорее набор связанных объектов. В качестве простого примера рассмотрим:

public class Node {
    public string Name {...}
    public Node Parent {...}
    public List<Node> Children {...}
}

где каждый дочерний элемент знает о родителе (а родитель знает о дочернем элементе).

Проблема в том, что xml - это дерево, основанное на свойствах объекта ... и он хочет просто пройтись по ним - то есть с простым родителем / потомком:

  • A (знает, что B его потомок)
    • B (знает, что A является его родителем)

, который будет сериализован как:

<Node>
  <Name>A</Name>
  <!-- no Parent as A is the top node, so null -->
  <Children>
     <Node>
        <Name>B</Name>
        <Parent>
           <Node>
              <Name>A</Name>
              *** boom ***

Вы можете видеть, что мы вернулись к A, так что теперь мы находимся в бесконечном цикле.

XmlSerializer может сериализовать деревья данных, но не полные графы. Вы можете пометить свойства, которые следует игнорировать, например:

[XmlIgnore]
public Node Parent {...}

И теперь это будет работать, но позже нам придется исправить Родитель .

Напротив, некоторые другие сериализаторы могут обрабатывать графики ( DataContractSerializer может по запросу). Он делает это, отслеживая объекты по уникальному ключу, но тогда результат будет не таким, как вы ожидаете от обычного XML.

52
ответ дан 27 November 2019 в 02:39
поделиться

Граф объектов - это набор объектов, которые ссылаются друг на друга.

Сериализация графа объектов является сложной задачей. Сериализатору придется присвоить уникальный идентификатор каждому объекту, а затем заменить ссылки уникальными идентификаторами.

Если бы он выполнял сериализацию в формате XML и обрабатывал графы объектов, ему пришлось бы добавить атрибут «OBJECT_ID» (или другой именованный) к каждому элементу. Это было бы очень легко сломать: что произойдет, если вы добавите свойство с тем же именем в класс, который вы сериализуете?

Самое простое решение - не поддерживать его.

.NET предоставляет двоичную сериализацию, которая имеет дело с этот выпуск, а также выпуск циркулярных ссылок.

9
ответ дан 27 November 2019 в 02:39
поделиться

Общий объект граф состоит из набора объектов, содержащих ссылки друг на друга. Если у вас есть дерево объектов, в котором нет обратных ссылок, сериализация и десериализация просты. В случае общего графа процесс (де) сериализации должен отслеживать идентичность каждого объекта и использовать некоторую форму алгоритма mark-and-sweep, чтобы гарантировать, что объекты не (де) сериализованы дважды.

5
ответ дан 27 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: