AKTUALIZACJA [23.12.2019]: Po części dzięki wkładowi społeczności głosowej ten problem został dodany do mapy drogowej dla .NET 5.0.
AKTUALIZACJA [10.10.2010]: Jeśli chcesz zobaczyć, jak to zachowanie zostało zaimplementowaneSystem.Text.Json.JsonSerializer
przejdź do otwartego numeru GitHub, na który zwrócił uwagę Chris Yungmann, i zważ.
Zamiast tego:
JsonSerializerOptions options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
// etc.
};
JsonSerializer.Deserialize<SomeObject>(someJsonString, options);
Chciałbym zrobić coś takiego:
// This property is a pleasant fiction
JsonSerializer.DefaultSettings = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
// etc.
};
// This uses my options
JsonSerializer.Deserialize<SomeObject>(someJsonString);
// And somewhere else in the same codebase...
// This also uses my options
JsonSerializer.Deserialize<SomeOtherObject>(someOtherJsonString);
Mamy nadzieję, że nie JsonSerializerOptions
będziemy musieli przekazywać instancji dla naszych najczęstszych przypadków i zastępować wyjątek, a nie regułę.
Jak wskazano w tym pytaniu , jest to przydatna funkcja Json.Net. Spojrzałem w dokumentacji dla System.Text.Json
jak to repo GitHub for .NET Core. I ten jeden .
Wydaje się, że w .NET Core 3 nie ma analogicznego narzędzia do zarządzania domyślnymi serializacjami JSON. Czy mogę to przeoczyć?
źródło
There doesn't seem to be an analog for managing JSON serialization defaults in Core-3
- Czy mówisz o żądaniach do i z interfejsu API? lub prośby i odpowiedzi na inne zasoby?Odpowiedzi:
Nie,
JsonSerializerOptions
nie ujawnia opcji domyślnych . Jeśli używasz określonego frameworka internetowego, może istnieć sposób określenia (de-) ustawień serializacji za jego pośrednictwem. W przeciwnym razie sugeruję stworzenie własnych metod wygody.Zobacz także ten otwarty problem .
źródło
Możesz utworzyć metodę rozszerzenia. Oto przykład
Używam osobnych metod zamiast budowania specjalnych ustawień, dzięki czemu wszystkie ustawienia będą w jednym miejscu i będą łatwe do ponownego użycia.
Następnie wywołujesz go jako metodę na łańcuchu, dosłownym lub zmiennym.
źródło
System.Text.Json.JsonSerializer
NET Core-3.0 bez dodatkowych zależności. Dzięki.System.Text.Json.JsonSerializer
. Pomysł był dokładnie taki sam. Zaktualizowałem również przykładowy link.Domyślne opcje nie są widoczne w
JsonSerializer
.NET Core 3.1. Jednak od grudnia 2019 r. Zostało to dodane do mapy drogowej dla wersji 5.0.Jest uwolnienie .NET 5.0 Oczekuje listopada 2020. Ale nie ma gwarancji, ten konkretny problem zostanie rozwiązany w danym momencie. Oprócz oczekiwania te odpowiedzi sugerują obejścia:
źródło
Obejście został zaproponowany przez GitHub użytkownika Andre-SS6 następująco:
źródło
(Jeśli kiedykolwiek przełączysz się na używanie Json.NET)
Wolę i zalecam jawność i przekazywanie ustawień do wszystkich połączeń, ale możesz ustawić wartości domyślne za pomocą DefaultSettings .
i wtedy
źródło
System.Text.Json
którym serializacja JSON jest wypalona w .NET Core 3.0. Dzięki za poświęcenie czasu na odpowiedź.