Was entspricht [Serializable] in .NET Core? (Konvertierungsprojekte)
In vielen Fällen, wenn ich will, zu konvertieren Strom .NET Framework Projekte .NETTO-Kern-äquivalent, einige Klassen haben Serializable-Attribut.
Was soll ich denn konvertieren Sie Sie in .NET-Core ? (In dieser Zeit habe ich löschen !!!)
BEARBEITEN
Betrachten Sie diesen code :
using System;
namespace DotLiquid.Exceptions
{
[Serializable] //I delete it now !!!!!!!
public class FilterNotFoundException : Exception
{
public FilterNotFoundException(string message, FilterNotFoundException innerException)
: base(message, innerException)
{
}
public FilterNotFoundException(string message, params string[] args)
: base(string.Format(message, args))
{
}
public FilterNotFoundException(string message)
: base(message)
{
}
}
}
obigen code ohne [Serializable] arbeitet .NET-Core, ohne syntax-problem.
Aber ich möchte wissen, Wann ich löschen [Serializable]
Was ist mit Nebenwirkungen ?
Welche Orte sollte geändert werden?
Wann sollte ich verwenden JSON.NET (oder ...) statt [Serializable] ?
InformationsquelleAutor der Frage NBM | 2016-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht mit der Serialisierung der Typ (das heißt, mit
BinaryFormatter
), dann können Sie entfernen[Serializable]
und vergessen Sie es.Wenn Sie BinaryFormatter serialisieren, bevor, dann werden Sie brauchen, um mit Ihrem eigenen plan auf, wie das funktioniert (ie. über Json.net oder XML).
Wenn Sie die Portierung einer Bibliothek und bat im Namen Ihrer Kunden, dann ist die Antwort die gleiche: entfernen Sie
[Serializable]
verlassen und Serialisierung, bis zu jenen, die es brauchen.InformationsquelleAutor der Antwort Richard Szalay
Zur Aktualisierung der Fragen, die hier sind.
Microsoft zu haben schien portiert SerializeAttribute, einer eigenen nuget-Paket: System.- Laufzeit.Serialisierung.Formatierer
Können Sie das nuget-Paket. Ich weiß zwar nicht, warum hat Sie es später.
Entfernten Sie es, weil Sie auch entfernt, binäre Serialisierung und es wurde hauptsächlich verwendet für die. Vielleicht haben Sie noch gebracht es wieder eine basis zu schaffen für eine andere Art der Serialisierung (wie json, xml etc). denn Sie müssen noch die gleichen Basen (mindestens json): dass Sie nicht verwenden können Schnittstellen oder abstrakten Eigenschaften, weil de deserializer nicht weiß, welches Objekt erstellen für diese Eigenschaft.
Vielleicht kann jemand etwas Licht in diese situation, oder ich werde, wenn ich mehr wissen.
Was ist SerializeableAttribute (Herkunft)
War die Idee, setzen Sie dieses Attribut auf eine Klasse zu sagen, es ist serializeable das würde bedeuten:
Warum?
da bei der Deserialisierung der Klasse und Ihre Eigenschaften werden reflektiert und wenn Reflexion fände eine Schnittstelle Eigenschaft als hätte es keine Ahnung, welche sub-Klasse zu erstellen (die richtige dll kann nicht einmal geladen wurden, werden Fragen wie diese).
Also in code:
Warum war es 'veraltet'
Dort, wo viele Probleme mit diesem Attribut, und binary formatter selbst (nur (de -) serializer, die tatsächlich geprüft wird für dieses Attribut).
Problem mit dem Attribut: Es konnte nicht durchgesetzt werden während der compile-Zeit, so dass erst zur Laufzeit werden Sie Fehler erhalten, erste: - Fehler, den Sie vergaß das SerializableAttribute. und erst später in der Laufzeit erhalten Sie die Fehlermeldung, die Sie nicht verwenden können, IEnumerable, da es eine Schnittstelle. So ist es nur zusätzliche Arbeit, statt der Lösung des nichts.
Dass Sie nicht migrieren Sie diese mit den binären formatiert, denn Sie sah es als depcreated oder 'erneuert' dort, wo einige wichtige Fragen, die es (so etwas sagte Sie in einem Ihrer video-Gespräche/confs).
das einzige Problem fand ich bis jetzt in Kombination mit IPC ist, dass auf DateTime-Objekt der Kind-Eigenschaft wurde nicht (de -) serialisiert.
Aber es ist wieder in dieses nuget-Paket: https://www.nuget.org/packages/BinaryFormatter/ .
Und es scheint, Sie brachten sogar eine neue version (2.1.0), die zeigen könnten, die Sie verlängern wollen seinen livespan.
Warum Sie migrieren?
Versuchen Sie, um Menschen zu bewegen, auf einen neuen 'Dotnet-Core" (anstelle von vollständigen Rahmen). Und die Strategien, die Sie verwenden, ist von der Portierung alles, auch wenn Sie für den code beschissen wie kann und sollte nicht von jedermann verwendet werden/"bessere open source alternativen", so dass es einfacher für die Menschen zu migrieren Ihre alt-code.
1 Nachteil ist, dass es schwer zu finden, geeignete Informationen auf, was nuget-packages/dll ' s sollte berücksichtigt werden, 'beschissen' und die nuget-Pakete, in denen völlig erneuert von Grund auf und beraten werden, um wieder verwendet werden.
InformationsquelleAutor der Antwort Joel Harkes
Binäre Serialisierung wurde entfernt .Netto-Kern aufgrund der Komplexität und Kompatibilität Probleme, die bei der Serialisierung. Stattdessen wurde beschlossen, dass die Serialisierung werden sollte, Protokoll-basierte statt. Siehe: https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/porting.md#binary-serialization
Dies nicht wirklich Auswirkungen, die die meisten Anwendungsfälle, wie Sie können, verwenden Sie einfach den XML-Serializer oder ein Drittanbieter-Paket wie json.net
InformationsquelleAutor der Antwort Steve
Updateum die gegebene Antwort:
.Net Core 2.0 unterstützt jetzt binäre Serialisierung für eine Teilmenge der Typen, Sie können die vollständige Liste hier
InformationsquelleAutor der Antwort MarkovskI