2008-12-24 3 views
18

J'ai besoin de sérialiser/désérialiser certains objets dans/depuis une chaîne et de les transférer en tant que données opaques. Je peux utiliser XmlSerializer pour le faire, mais la chaîne générée a l'air maladroite et longue. Donc, y a-t-il un Serializer concis disponible en .NET?Y a-t-il une classe d'assistance de sérialisation Json dans le standard .NET BCL?

La première chose qui me vient à l'esprit est que peut-être .NET devrait avoir JSON Serializer, mais je ne le trouve pas. Existe-t-il une approche prête à l'emploi dans .NET pour convertir un objet en une chaîne concise?

Répondre

26

Il y en a deux;

de manière traditionnelle, ils ne sont pas 100% compatibles entre-autres, en particulier re DateTime; DCJS utilise (IIRC) une chaîne littérale; JSS utilise new - et aucun ne peut lire correctement l'autre.

Bien sûr, si le texte est opaque, vous pouvez également utiliser un sérialiseur binaire concis, et simplement l'encoder en base 64; par exemple, protobuf-net est assez laconique. Mais l'utilisation de JSON minimise le code externe nécessaire à chaque extrémité, ce qui pourrait bien être votre meilleur pari.

+0

Selon MSDN, JavaScriptSerializer est dans System.Web.Extensions.dll qui est disponible dans .NET 3.5, pas nécessairement .NET 3.5 SP1. –

+0

IIRC, il a été marqué obsolète et récemment "non-déprécié" avec 3.5 SP1. –

0

il suffit d'utiliser votre propre api .. il est facile de créer JSON .. mais vous pouvez également utiliser les bibliothèques JSON comme JSON.NET ..

heureux de codage

0

JsonFx.NET a un sérialiseur open-source qui permet sérialisation vers/à partir de classes fortement typées qui pourraient être ce que vous cherchez. Vous pouvez contrôler la façon dont les dates sont sérialisées et remplacer de nombreux aspects de la sérialisation. Il interagit même bien avec Linq en prenant en charge la sérialisation des objets anonymes. L'API fonctionne exactement comme la sérialisation XML .NET.

4

J'ai un très rapide open source JsonSerializer disponible qui peut sérialiser tout POCO ou DataContract type, y compris des interfaces anonymes et fin types liés, etc.

de base Exemple

var customer = new Customer { Name="Joe Bloggs", Age=31 }; 
var json = JsonSerializer.SerializeToString(customer); 
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json); 
Questions connexes