私は次のコードを持っています。page.Fields
はExpandoObject
です。いくつかのユーザ定義のプロパティを繰り返して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>
で
page
クラスをした私は、あなたがExpandoObject、動的ではありませんしたい場合は、あなたのコードは、「VaRの小道具は」Json.NETは辞書をシリアル化することができます – Gusman「ダイナミック小道具」を使用するのではなく、私のために正常に動作します実際、JsonオブジェクトはJavaScript辞書です。おそらく、中間オブジェクトを経由するのではなく、Form.Keysから 'Dictionaty'を作成してシリアライズする必要があります。 –
いいえ、 'var props'は' dynamic props'でなくてはなりません。 IDictionaryは動的ではありません。 –
user3791372