使用JSON.NET序列化扩展对象



i具有以下代码,其中 page.FieldsExpandoObject。我正在通过一些用户定义的属性进行迭代,并将其添加到Expando中,将其施放到IDictionary<string,string>中,以使我能够动态添加新的字段名称/值,但是当我将Fields属性设置为props的值时,此后仅序列化。名称为{}的空白值。为什么?

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() IT使其适合预期的IDictionary<string,string>

正确地序列化您必须将变量声明为动态的数据,而不是作为ExpandOobject,JSON .NET使用反射来检索属性,如果是动态的,则将其施放为ExpandOobject并使用并使用按键作为属性名称,但是如果您直接传递ExpentOobject,它将尝试从ExpandOobject类型中检索属性。

只是更改

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

to

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

使用iProps添加数据并将道具传递到序列化中。

编辑:

您正在存储" page.fields"中的值,这也必须是动态的。

我怀疑这是一个缺陷,您没有获得与Field.标准相匹配的Request.Form.Keys

如果我有page属性 dynamic Fields属性

,您的代码对我来说正常

相关内容

  • 没有找到相关文章

最新更新