Arrière-plan: Nous utilisons un attribut qui modifie la sortie de la réponse à un objet JSON lorsque certains en-têtes sont transmis. Un autre attribut renvoie XML lorsque l'en-tête d'acceptation approprié est transmis. Si l'en-tête accept est manquant ou "html", une page de test est renvoyée.DataContractJSONSerializer Objets DataContract imbriqués contenant des listes
Je dois être en mesure de sérialiser une structure d'objet comme celui-ci:
[DataContract]
public class ResponseModel
{
[DataMember]
public bool Success { get; set;}
[DataMember]
public dynamic Data { get; set; } //I have tried "Object" as well
[DataMember]
public ApiErrorModel Error { get; set; }
}
//for reference
[DataContract]
public class ApiErrorModel
{
[DataMember]
public string ErrorCode { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
}
Le problème que je vais avoir est alors que je ne l'ai pas été en mesure de tester tous les états d'erreur encore, quand il va sérialiser une structure comme celle-ci:
[DataContract]
public class DatabaseModel
{
[DataMember]
List<Database> Database { get; set; }
//snip implementation
}
[DataContract]
public class Database
{
[DataMember]
[Required]
public string DatabaseName { get; set; }
[DataMember]
List<Guid> APITokens { get; set; }
//snip other fields..., Guids and strings...
}
Il échoue, me donner l'erreur:
type '[namespace] .Api.Business.Web.Models.DatabaseModel' avec le nom de contrat de données « DatabaseModel: http:// schemas.datacontract.org/2004/07/[namespace].Api.Business.Web.Models 'n'est pas prévu. Envisagez d'utiliser DataContractResolver ou ajoutez des types non connus de façon statique à la liste des types connus, par exemple, en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus transmis à DataContractSerializer.
J'ai recherché en utilisant un DataContractResolver, mais je n'arrive pas à le faire fonctionner avec la version JSON de celui-ci. Il peut être plus facile de basculer vers le sérialiseur JSON.NET ou JavaScriptSerializer, mais il doit également fonctionner pour XML (il s'agit peut-être d'un problème spécifique à JSON). Je me demande s'il existe un moyen de résoudre ce problème sans ajouter chaque type de liste que je vais utiliser à la liste des méthodes connues de la méthode de sérialisation.
'APITokenId' est-il un' DataContract'? –
En fait, c'est juste une liste, j'ai été incapable de copier et coller efficacement entre les deux ordinateurs. –
Quel est votre contrat de service qui utilise ces contrats de données? Pouvez-vous poster la définition de l'interface/classe et aussi quelques signatures de méthodes? Vous devrez peut-être utiliser l'attribut 'KnownType'. –