5

yaml と yamldotnet を発見しています。これがかなり基本的な質問である場合は申し訳ありません:

  • 次のような単一の感嘆符を使用して、yaml でユーザー定義型を定義することは意味がありますか。

    赤: !color { 赤: 255, 緑: 0, 青: 0 }

  • これは YamlDotNet によってどのようにデシリアライズされますか? つまり、型の色が.netの対応する色型に確実にマッピングされるようにする方法はありますか?

  • 次の例https://dotnetfiddle.net/HD2JXMの理解から、YamlDotNet は yaml ドキュメントと .net クラス間の暗黙的な対応を使用して、yaml プロパティを対応するクラス プロパティにマップします (例に示すように、これはカスタマイズできます)。注釈付き)。ただし、型チェックは行われません。

物事をさらに明確にする。一連のウィジェットに対応する次の yaml ドキュメントがあります。

controls:
  - Button:
      id: 1
      text: Hello Button World
  - Label:
      id: 2
      text: Hello Label World
  - TextView:
      id: 3
      content: >
        This is some sample text that will appear
        in a text view.

そして、それを c# の対応する型階層にマップしたい:

class AOPage
{
    public IList<AOControl> Controls { get; set; }

}

class AOControl 
{
    public int Id { get; set;}
}

class AOLabel : AOControl
{
    public String Text { get; set;}
}

class AOButton : AOControl
{
    public String Text { get; set;}
}

class AOTextView : AOControl
{
    public String Contents{ get; set;}
}

同様の質問ポスターがここにあることに注意してください: Using custom type resolverは回答されていません。

ありがとう!

4

1 に答える 1

3

タグを指定しない場合、デシリアライザーは、デシリアライズされるオブジェクト グラフの型情報を使用します。

YamlDotNet で必要なことを行うには、ローカル タグを使用するのが最も簡単な方法です。たとえば を使用し、!!colorそのタグのタグ マッピングを登録します。

deserializer.RegisterTagMapping("tag:yaml.org,2002:color", typeof(Color));

DeserializeCustomTags 単体テストで実際の例を確認できます。

于 2014-11-05T14:06:10.350 に答える