JSON.Net sérialiseur ignorant JsonProperty?
J'ai l'entité suivante classe:
public class FacebookComment : BaseEntity
{
[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
[BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
[JsonProperty("_id")]
public ObjectId Id { get; set; }
public int? OriginalId { get; set; }
public DateTime Date { get; set; }
public string Message { get; set; }
public string Sentiment { get; set; }
public string Author { get; set; }
}
Lorsque cet objet est sérialisé en JSON, je veux le champ Id être écrit "_id":{...}. Autant que je sache, je dois juste passer le désiré propertyname à la JsonProperty attribut; et je devrais être bon pour aller. Cependant, quand je l'appelle JsonConvert.SerializeObject; il semble ignorer mon attribut et rend ce lieu:
{
Author: "Author name",
Date: "/Date(1321419600000-0500)/",
DateCreated: "/Date(1323294923176-0500)/",
Id: {
CreationTime: "/Date(0)/",
Increment: 0,
Machine: 0,
Pid: 0,
Timestamp: 0
},
Message: "i like stuff",
OriginalId: null,
Sentiment: "Positive"
}
Comme vous pouvez le voir, le champ Id est en cours de rendu avec le mauvais nom de champ.
Des idées? Travaillé sur cette question pendant une heure; ne peut pas comprendre pourquoi le processus est apparemment ignorant mon JsonProperty.
Toute remarque constructive est grandement apprécié.
- Donc BaseEntity a et Id de propriété?
- Non, BaseEntity n'a qu'un champ DateCreated
- u ne jamais comprendre cela? Je suis sûr que ma réponse (qui m'a pris deux heures!) est probablement ce qui s'est passé
Vous devez vous connecter pour publier un commentaire.
Réponse courte: assurez-vous que tous vos assemblées sont la référence à la MÊME JSON.NET DLL. Ce qui est probablement ce qui se passe est que vous vous appliquez
[JsonProperty]
à partir d'une DLL dans un assemblage, et la sérialisation de l'objet à partir d'une autre assemblée qui est à la recherche d'un autre[JsonProperty]
et parce que le CLR types d'objets sont différents, il est effectivement ignoré.Réponds plus: je viens d'avoir ce problème mais, heureusement, parce que j'avais une classe qui travaille avec
JsonProperty
et qui n'étais-je pas été capable de faire un travail de détective.J'ai dépouillé le non-travail de la classe vers le bas pour que le strict minimum et par rapport à la classe ouvrière et ne pouvait pas voir de différences, sauf pour le fait que le non-travail de classe a dans une autre assemblée.
Quand j'ai déménagé à la classe de l'autre assemblée, il a parfaitement fonctionné comme il se doit.
J'ai tourné autour pour un peu, essayez de regarder dans la sérialisation JSON des espaces de noms, mais qui ne semblait pas s'appliquer alors j'ai regardé les références et bien sûr, je faisait référence à un vieux JSONNET3.5 DLL dans mon entités DLL et l'NUGET version 4.5 dans mon fichier de projet principal.
Cela me donne deux instances de
[JsonProperty]
attribut (qui est juste une classe ordinaire) et juste parce qu'ils sont nommés de la même façon ne signifie pas que le processus va de même à reconnaître l'attribut.typeof(JsonProperty).Assembly.CodeBase
au moment de l'exécution pour assurer la DLL est chargée et ne vient pas de quelque part d'inattendu[JsonObject(Mode=MemberSerialization.OptIn)]
sur mon objet. De toute façon je viens de me rappeler une fois j'ai eu un couper-coller d'erreur avec DEUX propriétés avec[JsonProperty(Name="foo")]
et que la cause de ce problème[JsonProperty("testProperty")]
cela fonctionne ok? ou TOUT JsonProperty les causes de la rupture? et vous êtes sûr que vous êtes en utilisant JSON.NET pour faire la désérialisation? avez-vous essayéJsonConvert.DeserializeObject<MyObject>(jsonString)
Ce post m'a aidé.
J'ai utilisé serialiser:
Mais rigtly utiliser ceci:
J'ai résolu ce problème en marquant mon Id de propriété avec [System.Moment de l'exécution.La sérialisation.DataMember(Name="_id")] au lieu de JsonProperty. Pas encore tout à fait clair pourquoi il ne fonctionne pas à l'origine mais...