У меня есть повторяющаяся проблема при передаче объектов Serialized между не-NET-клиентами и .NET WCF Services.WCF Отключить чувствительность порядка десериализации
Когда WCF десериализует объекты, он строго зависит от порядка свойств.
То есть, если я определяю мой класс, как:
public class Foo
{
public int ID { get; set; }
public int Bar { get; set; }
}
Тогда WCF будет сериализовать объект как, как:
<Foo>
<Bar>123</Bar>
<ID>456</ID>
</Foo>
Примечание: Свойства упорядочиваются в алфавитном порядке.
Если вы попытаетесь десериализовать объект с положением Bar
и ID
, то WCF обработает неправильно размещенные элементы как null.
Хотя я знаю, что могу использовать атрибут DataMember
, а также принудительное выполнение определенного заказа, я хочу уменьшить количество раз, когда мне приходится отлаживать проблемы, где поля «таинственно» равны нулю.
Итак, мой вопрос: можете ли вы указать Deserializer WCF игнорировать порядок полей при десериализации объектов.
Интересно. Теперь, чтобы написать перехватчик, который захватывает сообщение, запрашивает мехтод WCF, чтобы выяснить, какой тип ожидался, десериализовать с помощью XmlSerializer (который, согласно потоку, работает), и повторно сериализовать с помощью DataContractSerializer. Как просто;) Тем не менее ... возможно, единственное решение, которое действительно работает так, как ожидалось. Спасибо :) – 2009-11-13 09:47:16
@WillHughes - Я заинтригован, как вы преуспели в своей идее выше? – Reddog
@ Reddog Я никогда не реализовал его - сложно, и он довольно неэффективен (десериализуйте, отразите, повторитециализацию ... просто так, чтобы его можно было десериализовать снова.) Альтернативой было бы заменить сериализатор [, как указано здесь] (http: // weblogs.thinktecture.com/cweyer/2010/12/using-jsonnet-as-a-default-serializer-in-wcf-httpwebrest-vnext.html). – 2012-04-11 23:37:50