Mam model obiektu, który wygląda następująco:
public MyObjectInJson
{
public long ObjectID {get;set;}
public string ObjectInJson {get;set;}
}
Właściwość ObjectInJson
jest już serializowaną wersją obiektu, który zawiera zagnieżdżone listy. Na razie serializuję listę MyObjectInJson
ręcznie w następujący sposób:
StringBuilder TheListBuilder = new StringBuilder();
TheListBuilder.Append("[");
int TheCounter = 0;
foreach (MyObjectInJson TheObject in TheList)
{
TheCounter++;
TheListBuilder.Append(TheObject.ObjectInJson);
if (TheCounter != TheList.Count())
{
TheListBuilder.Append(",");
}
}
TheListBuilder.Append("]");
return TheListBuilder.ToString();
Zastanawiam się, czy mogę zastąpić tego rodzaju niebezpiecznym kodem JavascriptSerializer
i uzyskać takie same wyniki. Jak mam to zrobić?
Dzięki.
System.Web.Extensions
do użyciaSystem.Web.Script.Serialization
: stackoverflow.com/a/18746092/1599699 stackoverflow.com/a/19299695/1599699Odpowiedzi:
Jeśli używasz .Net Core 3.0 lub nowszy;
Domyślnie używa wbudowanej
System.Text.Json
implementacji parsera.na przykład
alternatywnie dostępne są inne, mniej popularne opcje, takie jak parser Utf8Json i Jil : Mogą one oferować lepszą wydajność , jeśli naprawdę tego potrzebujesz, ale będziesz musiał zainstalować odpowiednie pakiety.
Jeśli utknął przy użyciu .Net Core 2.2 lub wcześniejszej;
Domyślnie używany jest NewSoft JSON.Net jako pierwszy wybór JSON Parser.
na przykład
może być konieczne najpierw zainstalowanie pakietu.
Aby uzyskać więcej informacji, zobacz i głosuj odpowiedź, która jest źródłem tych informacji .
Tylko w celach informacyjnych to była pierwotna odpowiedź sprzed wielu lat;
źródło
Możesz także użyć Json.NET. Wystarczy go pobrać ze strony http://james.newtonking.com/pages/json-net.aspx , wyodrębnić skompresowany plik i dodać jako odniesienie.
Następnie po prostu serializuj listę (lub dowolny inny obiekt), wykonując następujące czynności:
Aktualizacja: możesz również dodać go do swojego projektu za pomocą Menedżera pakietów NuGet (Narzędzia -> Menedżer pakietów NuGet -> Konsola Menedżera pakietów):
Dokumentacja: Serializacja zbiorów
źródło
Istnieją dwa typowe sposoby, aby to zrobić za pomocą wbudowanych serializatorów JSON:
JavaScriptSerializer
DataContractJsonSerializer
Pamiętaj, że ta opcja wymaga zdefiniowania kontraktu danych dla twojej klasy:
źródło
źródło
.NET obsługuje już podstawową serializację Json za pośrednictwem przestrzeni nazw System.Runtime.Serialization.Json i klasy DataContractJsonSerializer od wersji 3.5. Jak sama nazwa wskazuje, DataContractJsonSerializer uwzględnia wszelkie adnotacje danych dodane do obiektów w celu utworzenia ostatecznego wyniku Json.
Może to być przydatne, jeśli masz już klasy danych z adnotacjami, które chcesz serializować Json do strumienia, jak opisano w Poradnik: szeregowanie i deserializacja danych JSON . Istnieją ograniczenia, ale jest wystarczająco dobry i szybki, jeśli masz podstawowe potrzeby i nie chcesz dodawać jeszcze kolejnej biblioteki do swojego projektu.
Poniższy kod serializuje listę do strumienia wyjściowego konsoli. Jak widzisz, jest nieco bardziej szczegółowy niż Json.NET i nie jest bezpieczny dla typu (tzn. Nie ma generycznych)
Z drugiej strony Json.NET zapewnia znacznie lepszą kontrolę nad sposobem generowania Jsona. Będzie to BARDZO przydatne, gdy trzeba mapować nazwy nazw przyjazne dla javascript na klasy .NET, formatować daty na json itp.
Inną opcją jest ServiceStack.Text , część stosu ServicStack ..., który zapewnia zestaw bardzo szybkich serializatorów dla Json, JSV i CSV.
źródło
bazując na odpowiedzi z innego posta. Wymyśliłem bardziej ogólny sposób na zbudowanie listy, wykorzystując dynamiczne pobieranie z Json.NET w wersji 12.x
wezwanie do przetworzenia
lub to wezwanie do przetworzenia
źródło