2016-12-01 5 views
1

私は次のコードを持っています。page.FieldsExpandoObjectです。いくつかのユーザ定義のプロパティを繰り返してExpandoに追加して、IDictionary<string,string>にキャストして新しいフィールド名/値を動的に追加できるようにしましたが、propsの値にFieldsプロパティを設定すると、空白値が{}の名前。どうして?json.NetでExpandoObjectをシリアライズ

page.Fields.Foo = "asdf"; 
var test = JsonConvert.SerializeObject(page); // shows Foo=asdf in the json 

// attach all fields to the page object, casting to an IDictionary to be able to add var names 
var props = new ExpandoObject() as IDictionary<string, Object>; 
foreach (string key in Request.Form.Keys) 
{ 
    if (key.StartsWith("Fields.")) 
    { 
     var fieldName = key.Substring(key.IndexOf(".") + 1); 
     props.Add(fieldName, Request.Form[key]); 
    } 
} 

var test2 = JsonConvert.SerializeObject(props); // blank values of {} 
page.Fields = props as ExpandoObject; 

// loses the values for the Fields property 
test = JsonConvert.SerializeObject(page); 

UPDATEはナンシーの呪いは、Request.Form値は、動的であることが判明打つので、私は.ToString()に持っていた、それはそれは正しくあなたがしなければならないデータをシリアル化することが期待IDictionary<string,string>

+1

pageクラスをした私は、あなたがExpandoObject、動的ではありませんしたい場合は、あなたのコードは、「VaRの小道具は」Json.NETは辞書をシリアル化することができます – Gusman

+0

「ダイナミック小道具」を使用するのではなく、私のために正常に動作します実際、JsonオブジェクトはJavaScript辞書です。おそらく、中間オブジェクトを経由するのではなく、Form.Keysから 'Dictionaty 'を作成してシリアライズする必要があります。 –

+0

いいえ、 'var props'は' dynamic props'でなくてはなりません。 IDictionary は動的ではありません。 – user3791372

答えて

1

に収まるようにするために変数をExpandoObjectではなく動的として宣言します。JSON .netはリフレクションを使用してプロパティを取得します。ダイナミックであればExpandoObjectとしてキャストし、プロパティ名としてキーを使用しますが、ExpandoObjectを直接渡すと、プロパティをExpandoObject型から削除します。

だけでデータを追加し、シリアライズに小道具を渡す

var props = new ExpandoObject() as IDictionary<string, Object>; 

var props = new ExpandoObject(); 
var iProps = props as IDictionary<string, Object>; 

に使用iPropsを変更します。

EDIT:あなたは "Page.Fields" に値を保存している

、これは、動的でなければなりません。

+0

なぜエクスパンダを使用しますか? Dictionary <>を作成するのは –

+1

です。なぜなら、ExpandoObjectの使用についての質問ではなく、辞書の使用についての質問であるからです。 – Gusman

+1

質問は、Expandoがキー/値データをForm.Keysから取得するために使用されることを示しています。 Expandoは動的利益をもたない辞書として使用されます –

0

私はそれが欠陥であると確信しており、Request.Form.KeysにはField.の条件に一致するものは何も得られません。

dynamic Fieldsプロパティ

関連する問題