JSON-Serializer-Objekt mit den internen Eigenschaften
Ich habe Klasse mit einigen internen Eigenschaften und ich möchte die Serialisierung in json als gut. Wie kann ich dies erreichen?
Zum Beispiel
public class Foo
{
internal int num1 { get; set; }
internal double num2 { get; set; }
public string Description { get; set; }
public override string ToString()
{
if (!string.IsNullOrEmpty(Description))
return Description;
return base.ToString();
}
}
Sparen Sie mit
Foo f = new Foo();
f.Description = "Foo Example";
JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
string jsonOutput = JsonConvert.SerializeObject(f, Formatting.Indented, settings);
using (StreamWriter sw = new StreamWriter("json_file.json"))
{
sw.WriteLine(jsonOutput);
}
Bekomme ich
{
"$type": "SideSlopeTest.Foo, SideSlopeTest",
"Description": "Foo Example"
}
- In der Regel interne Eigenschaften sind nicht dazu gedacht, zu verlassen und die Grenzen des aktuellen Montage-und somit serialisiert. Warum würden Sie brauchen, das zu tun? Wenn Sie möchten, eine korrekte JSON-Darstellung benötigen Sie möglicherweise einen DTO zum anzeigen Ihrer internen/privaten Sachen und dann serialisieren.
- +1 was @DarinDimitrov sagte. Aber wenn Sie wirklich wollen, es zu tun, ich glaube, Sie brauchen, um eine Unterklasse
DefaultContractResolver
zu machen, schauen Sie bei nicht-öffentlichen Eigenschaften als gut. - möglich, Duplikat der JSON.Net: Force Serialisierung aller privaten Felder und Felder, die in sub-Klassen
- Markieren Sie mit der
[JsonProperty()]
- Attribut. - wenn die Klasse ist auch die interne markieren Sie es mit
[JsonObject()]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Markieren Sie die internen Eigenschaften, die serialisiert werden mit der
[JsonProperty]
Attribut:Später dann, um zu testen:
Bekomme ich die folgende Ausgabe:
(Wo " - Kachel.JsonInternalPropertySerialization" und "Tile" sind-namespace und assembly-Namen, die ich verwende).
Nebenbei, wenn mit
TypeNameHandling
, nehmen Sie Notiz von dieser Achtung aus dem Newtonsoft docs:Für eine Diskussion, warum dies notwendig sein kann, sehen TypeNameHandling Vorsicht in Newtonsoft Json und und Externe json-anfällig, weil der Json.Net TypeNameHandling auto?.