組み込みのRequest.Form
.
オブジェクトの単純なインスタンスdynamic
(テスト プロパティと値を含む) を保存すると、すべてが機能し、プロパティ名と値の両方が保存されます。ただし、ナンシーのものを使用するとRequest.Form
、動的プロパティ名のみが保存されます。
動的データ (RavenJObjects など) を取得するときに正しい型を復元するために、さらに問題に対処する必要があることは理解していますが、今のところ、最初に動的な名前/値を保存する問題を解決したいと考えています。
テスト リクエストとコード全体を次に示します。
フィドラー リクエスト (PUT)
ナンシー・モジュール
Put["/report/{name}/add"] = parameters =>
{
reportService.AddTestDynamic(Db, parameters.name, Request.Form);
return HttpStatusCode.Created;
};
サービス
public void AddTestDynamic(IDocumentSession db, string name, dynamic data)
{
var testDynamic = new TestDynamic
{
Name = name,
Data = data
};
db.Store(testDynamic);
db.SaveChanges();
}
TestDynamic クラス
public class TestDynamic
{
public string Name;
public dynamic Data;
}
実行時の Request.Form の動的コンテンツ
結果の RavenDB ドキュメント
{
"Name": "test",
"Data": [
"username",
"age"
]
}
注: Request.Form のタイプはNancy.DynamicDictionary
. から継承されIEnumerable<string>
、期待されるIEnumerable<string, object>
. RavenDB はDynamicDictionary
、メンバー名と値のペアではなく、動的なメンバー名のみを列挙していると思います。
dynamic
RavenDB に保存することに関して、Request.Form をオブジェクトとして扱う方法、または扱うことができるかどうかを誰か教えてもらえますか? 可能であれば、RavenDB が正しくシリアル化できるように、インスタンスDynamicDictionary
を構築するために手作りの列挙を避けたいと考えています。dynamic
ありがとうございました
編集 1 @Ayende
DynamicDictionary はGetDynamicMemberNames()
メソッドを実装しているようです:
GitHub のコードを見ると、次の実装が明らかになります。
public override IEnumerable<string> GetDynamicMemberNames()
{
return dictionary.Keys;
}
これはあなたがここで見たいものですか?
編集2 @TheCodeJunkie
コードの更新をありがとう。これをテストするために私は持っています:
- GitHub から NancyFx/Nancy master ブランチのローカル クローンを作成しました
- 私のソリューションに Nancy.csproj を追加し、プロジェクトを参照しました
- 上記と同じテストを実行します
新しい DynamicDictionary からの RavenDB ドキュメント
{
"Name": "test",
"Data": {
"$type": "Nancy.DynamicDictionary, Nancy",
"username": {},
"age": {}
}
}
結果のドキュメントが改善されていることがわかります。型情報はDynamicDictionary
RavenDB によって正しく取得されるようになり、動的プロパティ名は正しくシリアル化されますが、残念ながら動的プロパティ値はシリアル化されません。
下の画像は、動作中の新しい外観を示していますDynamicDictionary
。私にはすべて問題ないように見えます。新しい辞書インターフェイスがはっきりと見えます。私が気付いた唯一のことは、デバッガーの動的な「結果ビュー」(「動的ビュー」とは対照的に) が、プロパティ名のみを表示し、それらの値を表示しないことでした。「動的ビュー」は、以前と同じように両方を示しています (上の画像を参照)。
実行時の DynamicDictionary の内容