物事のカップル:
あなたの例の出力は、マッピングのリストがあることを示唆しています。これはおそらく次のようになります。
employee:
name: Martin
job: Developer
skill: Elite
languages:
- c#
- java
- php
私が質問を理解する限り、CommunicationMessageをシリアル化する必要があります。 各CommunicationMessageオブジェクトは、スカラー(文字列)またはマッピングのリストの2つの異なる種類の値を持つキーと値のマッピングを表します。
このメモリ内構造がyaml配列をどのように表しているか分かりません。あなたが見るように、リスト "Childs"の各エントリはCommunicationMessageなのでKeyを持っていますが、出力例は "languages"の下の配列を示しています。
アレイ内と辞書のような値を使用してメモリ内の表現を修正すると、メモリモデルをループしてエミッタを使用してデータをシリアル化できます。
多くにSharpYamlはYAMLストリームと呼ばれるものをサポートするために見えるが、それは、JSONのために行われるだろうかと同じように動作する、と私はそれらが何であるかを知らない:
EDIT:サンプルコードの下にありませんうまくいかない。適切な場所に右ParsingEventを使用していません。私はこのビットを理解することはできません。
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()));
}
}
}
これは何ですか*カスタムウェイ*とは何を試しましたか? – lokusking
私はいくつかの例を見つけようとしましたが、何も見つかりませんでした。カスタムの方法は、クラスにList ** Childs **が含まれていて、別のキーにシリアライズする必要があるということです。私はJson.Netで同じことをしましたが、SharpYamlで同じことをする方法を見つけることができません –
[YamlRemapAttribute](https://github.com/xoofx/SharpYaml/blob/master/SharpYaml/Serialization /YamlRemapAttribute.cs)。これはあなたのニーズに合うようです – lokusking