Суррогат DataContract для типа усиленного значения - PullRequest
2 голосов
/ 10 ноября 2011

Я хочу использовать пользовательский апплицированный тип (например, Nullable) в классе DataContract.Я пытался написать IDataContractSurrogate, но при десериализации это не удалось.

Мой усиленный тип выглядит так:

public struct Amplified<TValue>
{
    public TValue Value { get; set; }
    //... some special code ...
}

А DataContract может выглядеть так:

[DataContract] public class MyDTO
{
     [DataMember] public Amplified<string> SpecialString { get; set; }
}

Приведенный выше код работает, но создает ненужное вложение со свойством Value усиленного типа.Я хочу, чтобы DataContract представлял Ampliefied как обычную строку в проводе.

Возможно ли это с сериализаторами DataContract (JSON & Xml)?Почему я получаю InvalidCastException при использовании IDataContractSurrogate для замены Amplified на строку?

1 Ответ

1 голос
/ 15 ноября 2011

Вы не можете использовать суррогаты для примитивных типов (то есть вы сможете конвертировать из Amplified<T> в T, когда T - примитив, но не в другом направлении).Для возможной альтернативы взгляните на раздел «Мелкозернистый контроль формата сериализации для примитивов» в http://blogs.msdn.com/b/carlosfigueira/archive/2011/09/06/wcf-extensibility-serialization-callbacks.aspx.

...