У меня есть бизнес-требование только отправлять разрешенные свойства в нашу полезную нагрузку. Например, наш ответ DTO может иметь несколько свойств, а один из них - SSN. Если у пользователя нет разрешений для просмотра SSN, я бы никогда не захотел, чтобы он был в ответ Json. Второе требование состоит в том, что мы отправляем пустые значения, если у клиента есть разрешения на просмотр или изменение свойства. Из-за требования второго требования свойства, которые пользователь не может просматривать в null, не будут работать. Я должен по-прежнему возвращать нулевые значения.ServiceStack Json Serializer игнорирует свойства
У меня есть решение, которое будет работать. Я создаю expandoObject, отражая через мой DTO и добавляя только те свойства, которые мне нужны. Это работает в моих тестах.
Я рассмотрел реализацию ITextSerializer. Я мог бы использовать это и обернуть свой ответ DTO в другой объект, который будет иметь список свойств, которые нужно пропустить. Затем я мог бы свернуть собственные SerializeToString() и SerializeToStream(). На данный момент я не вижу других способов. Я не могу использовать JsConfig и сделать SerializeFn, потому что свойства для пропуска будут меняться с каждым запросом.
Поэтому я считаю, что реализация ITextSerializer - хороший вариант. Есть ли хорошие примеры этого внедрения? Я бы очень хотел использовать всю тяжелую работу, которая уже была выполнена в сериализаторе, и использовать отличную производительность. Я думаю, что в идеальном мире мне просто нужно добавить проверку в WriteType.WriteProperties(), чтобы посмотреть, и свойство - это одно, чтобы писать, но это внутреннее и действительно, большинство из них так что я действительно не могу их преимущества.
Если у кого-то есть проницательность, пожалуйста, дайте мне знать! Может быть, я делаю реализацию ITextSerialzer намного сложнее, чем она есть на самом деле?
Спасибо!
Запрос на увольнение #359 добавил свойство «ExcludePropertyReference» к JsConfig и JsConfigScope. Теперь вы можете исключить ссылки в области, как мне было нужно.
Благодарим за помощь, но вся моя причина в том, что вы хотите изменить сериализатор, так что я не буду отражать объект ответа более одного раза. Ваше решение все равно потребует этого. Однако мне нравится ваша идея создания настраиваемого атрибута. У меня будут некоторые свойства, которые не являются полномочиями, и я могу украсить их атрибутами. –