Angenommen, ich eine Klasse wie diese:Wie wird ein C# ref-Feld mit Newtonsoft.Json serialisiert?
[JsonObject(MemberSerialization.OptIn)]
public class TestClass
{
private readonly int _SomeField;
[JsonProperty(nameof(InputInfo))]
public ref readonly int SomeField => ref _SomeField;
}
Hinweis: Diese Klasse ist ein abgespeckte Beispiel in meinem realen Welt Szenario, dass Feld nicht Mitglied Feld ist, sonst I Ich habe gerade das Json-Attribut hinzugefügt. Dieses Feld ist ein Feld, das von einem anderen Objekt, das ein Mitglied der Klasse ist, freigelegt wird. Die öffentliche Eigenschaft gibt dieses Feld nur für den Benutzer frei, um den Zugriff auf diesen Wert zu erleichtern.
Auch, die tatsächliche Eigenschaft tipe ist nicht
int
, sondern ein 12-Bytestruct
, so dass ich zurückkehren es durch Bezugnahme, um die nutzlose Kopie von Wert zu vermeiden.
Ich serialisieren eine solche Klasse mit JsonConvert.SerializeObject(this, Formatting.Indented)
.
Die Newtonsoft.Json löst eine Ausnahme aus, wenn der Wert Umwandlung, sagen, es nicht das Feld/Eigenschaftswert zugreifen kann (ich denke, es ist ein ref
Parameter ist das Reflexionsverfahren macht von der Bibliothek Absturz verwendet).
Ich habe versucht, mit einem benutzerdefinierten JsonConverter
experimentieren, aber der Absturz passiert, bevor ein zusätzlicher Konverter überhaupt verwendet wird.
Ich weiß, eine schnelle Lösung wäre, einen sekundären, privaten Parameter hinzuzufügen, der nur dieses Feld als Wert und nicht durch Verweis zurückgibt, und nur für die Json-Serialisierung verwendet, aber sieht nur schlecht für mich aus (und ich würde muss die automatische VS-Warnung über nicht verwendete private Parameter auch deaktivieren), und ich suche nach einer besseren Lösung, wenn möglich (ohne nutzlose Felder/Eigenschaften einzuführen).
Danke für Ihre Hilfe!
Ich konnte keine vorbestehenden Problem finden, so ich diese Berichterstattung empfehlen würde. Link für Probleme ist hier: https://github.com/JamesNK/Newtonsoft.Json/issues – dbc
Danke für die schnelle Antwort! Ja, ich befürchtete, dass es im Moment nicht unterstützt wird. Ich habe hier ein Problem erstellt: https://github.com/JamesNK/Newtonsoft.Json/issues/1552 – Sergio0694