J'ai deux ou trois méthodes Web ASP.NET standard que je vous appelle de javascript avec un paramètre qui est d'une classe personnalisée sous formeComment s'assurer que la sérialisation et la désérialisation avec WebServices est symétrique?
[DataContract]
[KnownType(typeof(MyOtherSubclass))]
public class MyClass
{
[DataMember]
public MyOtherClass MyMember { get; set; }
}
où MyOtherClass
est une classe marquée avec Serializable
mais pas avec DataContract
attribut (je n'ai pas de contrôle sur sa génération). Il y a quelques sous-classes de MyOtherClass
, par ex. MyOtherSubclass
:
[Serializable]
public class MyOtherSubClass : MyOtherClass
{
private string valueField;
public string Value
{
get { return valueField; }
set { valueField = value; }
}
}
Lorsque j'utilise le DataContractJsonSerializer pour sérialiser un objet de MyClass directement, je reçois un résultat similaire à
{ "MyMember" : { "__type" : "MyOtherSubClass:#Namespace", "valueField" : "xxx" } }
Cependant, quand je passe un tel JSON dans la méthode Web demande javascript , Je reçois une exception pendant la désérialisation. Je l'ai expérimenté un peu et a constaté que lors de l'utilisation la suivante au lieu
{ "MyMember" : { "___type" : "Namespace.MyOtherSubClass", "Value" : "xxx" } }
le désérialisation fonctionne sans aucun problème.
Y a-t-il un moyen de configurer le DataContractJsonSerializer de manière à ce qu'il produise le JSON dans le second formulaire, de sorte que la désérialisation des arguments de la méthode Web puisse fonctionner?