Próbuję użyć następującego kodu do serializacji typu anonimowego do JSON:
var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray());
Jednak pojawia się następujący wyjątek, gdy jest to wykonywane:
Nie można serializować typu „<> f__AnonymousType1`3 [System.Int32, System.Int32, System.Object []]”. Rozważ oznaczenie go atrybutem DataContractAttribute i oznaczenie wszystkich jego elementów członkowskich, które chcesz serializować, za pomocą atrybutu DataMemberAttribute. Zobacz dokumentację Microsoft .NET Framework dla innych obsługiwanych typów.
Nie mogę zastosować atrybutów do typu anonimowego (o ile wiem). Czy jest inny sposób wykonania tej serializacji, czy czegoś mi brakuje?
System.Web.Extensions.dll
i dodaćusing System.Web.Script.Serialization;
oświadczenie.Jak wspominali inni, Newtonsoft JSON.NET jest dobrą opcją. Oto konkretny przykład prostej serializacji JSON:
Uważam, że jest to bardzo elastyczna, wszechstronna biblioteka.
źródło
Możesz wypróbować mój ServiceStack JsonSerializer, który jest obecnie najszybszym serializatorem .NET JSON . Obsługuje serializację DataContract, dowolny typ POCO, interfejsy, obiekty z późnym wiązaniem, w tym typy anonimowe itp.
Podstawowy przykład
Uwaga: używaj tylko Microsofts JavaScriptSerializer, jeśli wydajność nie jest dla ciebie ważna, ponieważ musiałem pominąć ją w moich testach porównawczych, ponieważ jest do 40x-100x wolniejsza niż inne serializatory JSON.
źródło
Proszę zauważyć, że pochodzi z 2008 roku. Dzisiaj argumentowałbym, że serializator powinien być wbudowany i prawdopodobnie można użyć atrybutów swagger +, aby poinformować konsumentów o punkcie końcowym i zwracanych danych.
Twierdzę, że nie powinieneś serializować anonimowego typu . Znam pokusę tutaj; chcesz szybko wygenerować kilka typów do odrzucenia, które będą używane w luźnym środowisku, znanym jako JavaScript w przeglądarce. Mimo to stworzyłbym rzeczywisty typ i udekorowałbym go jako serializowalny. Następnie możesz zdecydowanie wpisać swoje metody internetowe. Chociaż nie ma to znaczenia dla Javascript, dodaje trochę dokumentacji własnej do metody. Każdy rozsądnie doświadczony programista będzie mógł spojrzeć na sygnaturę funkcji i powiedzieć: „O, to jest typ Foo! Wiem, jak to powinno wyglądać w JSON”.
Powiedziawszy to, możesz wypróbować JSON.Net do wykonania serializacji. Nie mam pojęcia, czy to zadziała
źródło
Najszybszy sposób, jaki znalazłem, był następujący:
Przestrzeń nazw: System.Web.Script.Serialization.JavaScriptSerializer
źródło
Możesz użyć Newtonsoft.Json.
źródło
Zakładając, że używasz tego dla usługi internetowej, możesz po prostu zastosować następujący atrybut do klasy:
Następnie następujący atrybut do każdej metody, która powinna zwrócić Json:
I ustaw typ zwracania metod na „obiekt”
źródło
źródło