Когда / Почему я не должен использовать IsReference = true в моих DataContracts? - PullRequest
14 голосов
/ 16 января 2012

Я понимаю, что такое атрибут свойства IsReference и что он делает. Но я не понимаю, почему / когда я должен не использовать это. Когда плохая идея использовать IsReference = true?

Если моя служба wcf работает с .net в .net, есть ли веские причины для не установить IsReference = true?

Ответы [ 2 ]

11 голосов
/ 07 мая 2012

Существует по крайней мере две причины, по которым следует избегать использования IsReference:

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

Во-вторых, DataContractJsonSerializer не может сериализовать объекты, помеченные атрибутом IsReference.Так что, если вам нужно поддерживать Xml и Json, вы не сможете его использовать.

Кроме тех, я не вижу причин, чтобы не использовать его.В конце концов, это экономит драгоценную пропускную способность!

1 голос
/ 17 января 2012

Я думаю, что ничего плохого не должно произойти.Если ваш график содержит более одной ссылки на один и тот же экземпляр объекта, установка этого атрибута в значение true уменьшит размер XML.

http://zamd.net/2008/05/20/datacontract-serializer-and-isreference-property/

Однако я не уверен, почему он не включен по умолчанию.

...