Exclut les biens de la sérialisation json dans ApiController
Je suis en train d'exclure les propriétés d'être sérialisé en JSON web ApiControllers. J'ai vérifié les 2 scénarios de travail.
J'ai inclus les attributs suivants sur le bien que je souhaite à exclure.
[System.Web.Script.Serialization.ScriptIgnore]
[System.Xml.Serialization.XmlIgnore]
Si j'manuellement sérialiser mon objet à l'aide de la JavaScriptSerializer, la propriété est exclue. Aussi, si j'ai vue le sérialisé en XML de sortie à partir du web ApiController, la propriété est exclue. Le problème est, la sérialisé JSON via le web ApiController contient toujours la propriété. Est-il un autre attribut que je peux utiliser, qui excluent la propriété de la sérialisation JSON?
Mise à JOUR:
J'ai réalisé tous mes tests ont été beaucoup plus complexe projet et que je n'avais pas essayé ceci dans un environnement isolé. Je l'ai fait et je suis toujours à obtenir les mêmes résultats. Voici un exemple de code qui est en cause.
public class Person
{
public string FirstName { get; set; }
[System.Web.Script.Serialization.ScriptIgnore]
[System.Xml.Serialization.XmlIgnore]
public string LastName { get; set; }
}
public class PeopleController : ApiController
{
public IEnumerable<Person> Get()
{
return new[]
{
new Person{FirstName = "John", LastName = "Doe"},
new Person{FirstName = "Jane", LastName = "Doe"}
};
}
}
Ici est la sortie générée.
JSON:
[
{
"FirstName" : "John",
"LastName" : "Doe"
},
{
"FirstName" : "Jane",
"LastName" : "Doe"
}
]
XML:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Person>
<FirstName>John</FirstName>
</Person>
<Person>
<FirstName>Jane</FirstName>
</Person>
</ArrayOfPerson>
Je ne vois pas cela comme un double de l'puisque je ne peux pas utiliser IgnoreDataMember parce que mon objet et toutes ses propriétés doivent encore être sérialisé pour WCF communication derrière les coulisses. Je suppose que la racine de ma question est qu'est-ce que ASP.NET à l'aide de sérialiser en JSON? Il ne semble pas qu'ils sont à l'aide de la JavaScriptSerializer.
ah, a obtenu vous. Je corrige la position des mains.
Découvrez celui-ci: la réponse semble être que le Modèle de Classeur t-il, et vous avez besoin pour mettre en œuvre votre propre modèle de classeur: stackoverflow.com/questions/7330555/....
Ok, encore un essai... découvrez ce type de solution: stackoverflow.com/questions/1302946/...
OriginalL'auteur Adam Carr | 2012-05-07
Vous devez vous connecter pour publier un commentaire.
Être conscient que la sérialisation JSON est en train de changer dans l'API Web.
Dans la version bêta, Web API utilisée DataContractJsonSerializer pour sérialiser JSON. Cependant, cela a changé; le la dernière version de l'API Web utilise json.net par défaut, mais vous pouvez remplacer cette valeur et l'utilisation DataContractJsonSerializer à la place.
Avec DataContractJsonSerializer, vous pouvez utiliser [DataContract] attributs pour contrôler la sérialisation. Je suis stil ne sont pas très familiers avec json.net donc je ne sais pas comment il contrôle la sérialisation.
Est-ce toujours le cas avec service WCF .NET 4.5?
OriginalL'auteur Mike Wasson
Vous pouvez utiliser
[JsonIgnore]
attribut pour un JSON-correctif spécifique; ou vous pouvez utiliser[DataContract]
et[DataMember]
pour un correctif qui fonctionne à la fois avec le JSON formateur, et avec l' (XML)DataContractSerializer
.Cet article fournit des informations plus détaillées sur les médias par défaut de type formateurs:
http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#json_media_type_formatter
OriginalL'auteur crimbo
C'est un peu tard pour le jeu, mais
IgnoreDataMember
est précisément ce dont nous avons besoin dans votre/mon scénario:Selon la MSDN,
IgnoreDataMember
sont venus avec .NET 3.0 SP2.OriginalL'auteur JMD
JsonIgnore modifie l'ensemble de définition de classe. Dans le cas où vous souhaitez contrôler l'action spécifique/demande, vous pouvez essayez cette approche.
OriginalL'auteur joym8
Ressemble à ceci couvre ce dont j'ai besoin. Il vous montre que vous pouvez extraire les formateurs. Il inclut même un exemple formateur qui utilise le JavaScriptSerializer ce dont j'ai besoin.
http://wildermuth.com/2012/2/22/WebAPI_for_the_MVC_Guy
OriginalL'auteur Adam Carr