Попытка сделать ваши DTO как можно более «динамичными» - это плохой дизайн сервиса, из-за которого в вашем сервисном контракте есть дыра, которая допускает неизвестные типы, которые не будут работать в большинстве сериализаторов, потерпят неудачу в большинстве не .NET языков , не могут быть задокументированы в службах метаданных и подвержены дополнительным ограничениям безопасности .
При этом ServiceStack поддерживает принятие произвольных объектов JavaScript или JSON , если выиспользуйте свойство с типом object
:
[Route("/callback")]
public class Callback : IReturn<CallbackResponse>
{
public object Payload { get; set; }
}
Но я также только что расширил его для поддержки Dictionary<string,object>
и List<object>
в этого коммита , где он теперь будет использоватьдинамический сериализатор JSON для анализа свойств объектов и коллекций объектов.Это изменение доступно в v5.4.1.
Но оно все равно должно использоваться экономно по указанным выше причинам, поскольку оно делает ваши службы менее совместимыми и более подверженными проблемам времени выполнения.
Рассмотрите возможность использования string
когда значение свойства неизвестно, и ваша служба проанализирует его в ожидаемом типе, например:
Dictionary<string,string> Properties { get; set; }
, который является более функционально совместимым и не имеет проблем, которые позволяют неизвестные object
.