Paar Dinge:
Ihr Beispiel Ausgang legt nahe, dass es eine Liste der Zuordnungen ist. Es sollte wahrscheinlich so aussehen:
employee:
name: Martin
job: Developer
skill: Elite
languages:
- c#
- java
- php
Soweit ich die Frage verstehe, möchten Sie CommunicationMessage serialisieren. Jedes CommunicationMessage-Objekt stellt eine Schlüssel-Wert-Zuordnung dar, die zwei verschiedene Arten von Werten aufweisen kann: Ein Skalar (Zeichenfolge) oder eine Liste von Zuordnungen.
Was ich nicht verstehe, ist, wie diese In-Memory-Struktur ein YAML-Array darstellen würde. Sie sehen, jeder Eintrag in der Liste "Childs" ist eine CommunicationMessage, also hat er einen Schlüssel, während die Beispielausgabe ein Array unter "Sprachen" zeigt, das keine Schlüssel, nur Werte hat.
Sobald Sie die In-Memory-Darstellung beheben (Array- und Dictionary-ähnliche Werte zulassen), können Sie das Speichermodell durchlaufen und zum Serialisieren der Daten einen Emitter verwenden.
, dass viele die gleiche Art und Weise funktioniert, wie man es für json getan werden würde, obwohl SharpYaml etwas yaml Ströme genannt zu unterstützen scheint, und ich weiß nicht, was diese sind:
EDIT: Untercodebeispiel tut nicht arbeiten. Es verwendet nicht das richtige ParsingEvent s an den richtigen Stellen. Ich kann mir das nicht vorstellen.
public class EmitterStuff
{
public static void Main(string[] args)
{
Dictionary<string, object> toSerialize = new Dictionary<string, object>();
// Add values
// Use following code as an example to serialize the in-memory data
string yaml;
using (TextWriter output = new StringWriter())
{
IEmitter emitter = new Emitter(output);
emitter.Emit(new DocumentStart());
WriteYamlObject(emitter, toSerialize);
emitter.Emit(new DocumentEnd(false));
yaml = output.ToString();
}
// result is in yaml
}
private static void WriteYamlObject(IEmitter emitter, object obj)
{
if (obj is IDictionary<string, object>)
{
emitter.Emit(new MappingStart());
var dict = (IDictionary<string, object>) obj;
foreach (KeyValuePair<string, object> pair in dict)
{
emitter.Emit(new Scalar(pair.Key));
WriteYamlObject(emitter, pair.Value);
}
emitter.Emit(new MappingEnd());
}
else if (obj is ICollection<object>)
{
emitter.Emit(new SequenceStart());
var coll = (ICollection<object>) obj;
foreach (object value in coll)
{
WriteYamlObject(emitter, value);
}
emitter.Emit(new SequenceEnd());
}
else
{
// You probably should have some special cases here.
emitter.Emit(new Scalar(obj.ToString()));
}
}
}
Was ist das * Custom Way * und was hast du schon probiert? – lokusking
Ich habe versucht, einige Beispiele zu finden, aber nichts gefunden. Der benutzerdefinierte Weg besteht darin, dass die Klasse eine Liste ** Childs ** enthält, die zu einem anderen Schlüssel serialisiert werden sollte. Ich habe das gleiche mit Json.Net gemacht, aber ich kann keinen Weg finden, das gleiche mit SharpYaml zu tun. –
Werfen Sie einen Blick auf [YamlRemapAttribute] (https://github.com/xoofx/SharpYaml/blob/master/SharpYaml/Serialization /YamlRemapAttribute.cs). Dies scheint Ihre Bedürfnisse zu erfüllen – lokusking