問題タブ [yamldotnet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
yamldotnet - YAML ファイルで重複を禁止することは可能ですか?
YamlDotNet を使用して単純な構成ファイルを解析しています (深いネストなどはありません)。デシリアライザーは、重複するフィールドを含む文字列を解析し、以前の値を上書きします。例えば、
と同等と見なされます
私のアプリケーションでは、そのような重複によって例外がスローされることを望みます。これは可能ですか?
c# - データの YAML「テーブル」を逆シリアル化します
yamldotnet と c# を使用して、サード パーティのソフトウェア アプリケーションによって作成されたファイルを逆シリアル化しています。次の YAML ファイルの例は、両方ともアプリケーションから有効です。
File2 には Age 列がありませんが、デシリアライザーは各行の 3 番目の値が年齢ではなく高さであることを認識する必要があることに注意してください。このデータは、人のテーブルを表すことになっています。たとえば、File1 の場合、Mary Ryan は 20 歳で、身長は 169 cm です。デシリアライザーは、持っている列を理解し (File2 の場合、FirstName、LastName、および Height のみを持っています)、適切なオブジェクトにデータを適切に格納する必要があります。Mary Ryan の身長は 169cm です。
同様に、プログラムのドキュメントには、列の順序は重要ではないことが記載されているため、以下の File3 は、Height が最初であっても File2 のデータを表すのと同様に有効な方法です。
いくつか質問があります:
- これは標準の YAML ですか? - 同じ行で多数のキーを使用し、その後にコロンと値のリストを続けてデータのテーブルを表す方法については何も見つかりませんでした。
- yamldotnet を使用してこれを逆シリアル化するにはどうすればよいですか? それを助けるために私ができる修正はありますか?
- yamldotnet を使用できない場合、どうすればよいですか?
c# - 不変のデータ構造を逆シリアル化する方法は?
YAML を不変のデータ構造に逆シリアル化するにはどうすればよいですか?
たとえば、私はこの YAML を持っています:
そして、このデータ構造:
これには、コンストラクターを使用します。したがって、どういうわけか、最初Dictionary<string, object>
にクラスを尊重して YAML から解析されたものを取得する必要があり (したがって、99 は文字列ではなく int になります)、適切なコンストラクターの型をスキャンします。
.net - YamlDotNet での子クラスのシリアル化
アプリケーションに YAML シリアライズ/デシリアライズを追加しようとしています。私のクラス構造は、いくつかの型が基本クラスから派生するようなものです。子クラスの 1 つをシリアル化しようとすると、YamlDotNet に子クラスに固有のプロパティが含まれていないように見えます。簡単な例として:
次のコードを使用してシリアル化します。
次の YAML を生成します。
snakeyaml - snakeyaml (Java) と YamlDotNet (C#) を使用して、Java から C# への Double.NaN を処理します。
私は YAML を使用して C# GUI とサーバー側 Java の間で通信していますが、これは一般的に正常に動作しています。ただし、Double であるフィールドを渡し、値が Java 側で Double.NaN の場合、Yaml は ".NaN" として渡され、C# 側で逆シリアル化すると、C# として「System.FormatException」がスローされます。文字列 "NaN" [".NaN" ではない] が必要です。
デシリアライザーをインターセプトする方法があるかどうか、または C# 側で ".NaN" を double で解析できるようにフォーマットを追加する方法があるかどうかは誰にもわかりませんか?
(私が考えることができる 1 つの回避策は、YAML にシリアライズする前にすべての NaN を特別な値に変更し、次に C# で特別な値を認識して NaN に変換することですが、これは大きなハックのようです。)
yamldotnet - YamlDotNet のタグで名前空間とクラス名を使用する方法
SnakeYaml を使用して C# (YamlDotNet) から Java にネストされた Dictionary プロパティを持つオブジェクトをシリアル化し、サーバー側で逆シリアル化しようとしています。奇妙なことに、これは次の形式のプロパティでうまく機能していました。
ただし、ネストの追加レイヤーがある場合の別のオブジェクトの場合:
クラス InstrumentId はオブジェクトにシリアル化されなくなりました。代わりに、LinkedHashMap が作成されます。
この問題を解決するには、シリアライザーで YamlDotNet の次のオプションを使用できるのではないかと考えました。
これには、タイプに関する情報が含まれます。これは、LinkedHashMap を取得するのではなく、適切なオブジェクトを作成するためにタグ マッピングで Java 側で使用することを望んでいました。
作成されるタグには、名前空間とクラス名だけでなく、バージョンの文化、公開鍵トークンなど、アセンブリに関するすべての情報も含まれます。
たとえば、Java から C# では、次のタグが作成される場合があります。
ただし、C# から Java へは、次のものが作成されます。
簡潔なタグ マッピングを表示する方法はありますか?
Java から C# まで、最上位の Yaml はキーと値を提供しますが、HashMap については言及していません。
C# から Java まで、ディクショナリとジェネリック型に関する完全な情報が提供されます。
SnakeYaml のようなより簡潔な方法でシリアル化する方法を誰かが提案できますか?
特に、これは必須ではないと思うので、Dictionary に関する情報を持たない方が便利です。YAML 構文はキーと値の関係をカバーする必要があります。
yamldotnet - 子クラスを逆シリアル化するには?
同じ基本クラスのアイテムを保持するリストがありますが、子クラスは異なります。これを逆シリアル化するにはどうすればよいですか?
例えば
ありがとう