Когда/Почему я не должен использовать IsReference = true для своих DataContracts?
Я понимаю, что такое свойство атрибута IsReference и что он делает. Но я не понимаю, почему/когда я должен не использовать его. Когда это плохая идея использовать IsReference = true?
Если моя служба wcf -.net в .net, есть ли веские причины для не установить IsReference = true?
Ответы
Ответ 1
Существует не менее двух причин, чтобы избежать использования IsReference:
Во-первых, это ограничение производительности, поскольку весь сериализатор должен выполнить проверку подлинности для каждого объекта, который должен быть сериализован.
Во-вторых, DataContractJsonSerializer не может сериализовать объекты, помеченные атрибутом IsReference. Поэтому, если вам нужно поддерживать Xml и Json, вы не сможете его использовать.
Кроме того, я не вижу причин не использовать его. В конце концов, это экономит некоторую драгоценную полосу пропускания!
Ответ 2
Я думаю, что ничего плохого не произойдет. Если ваш граф содержит более одной ссылки на один и тот же экземпляр объекта, установка этого атрибута в true приведет к уменьшению размера XML.
http://zamd.net/2008/05/20/datacontract-serializer-and-isreference-property/
Однако я не уверен, почему он не включен по умолчанию.