2011-07-07 13 views
8

我需要将资源文件(.resx)中的字符串序列化为JSON对象。资源文件的键值不断变化,因此我不能只创建一个接受适当值的C#对象。它需要成为一个动态的解决方案。我能够遍历文件的键值对,但我需要一种简单的方法将它们序列化为JSON。如何在C#中动态创建JSON对象(从ASP.NET资源文件中)?

我知道我可以做的:

Object thing = new {stringOne = StringResource.stringOne; ...} 

但是,我宁愿是这样的:

Object generic = {} 
foreach (DictionaryEntry entry in StringResource) { 
    generic.(entry.Key) = entry.Value 
} 

或者我应该创建一个自定义JSON序列化是零碎构造对象(即foreach循环,每个循环追加部分JSON字符串)?

编辑
我最后写一个快速的JSON序列在某时刻构造串一个字段。我不想包含整个JSON库,因为这是JSON对象的唯一用途(至少现在是这样)。最终,我想要的可能是不切实际的,并不存在,因为它的功能更适合其他数据结构。尽管感谢所有的答案!

回答

7

如果你使用C#4.0,你应该看看神奇的System.Dynamic.ExpandoObject。它是一个对象,允许您在运行时使用.NET 4.0中的新DLR动态添加和删除属性。对于ExpandoObject来说,Here是一个很好的示例。

一旦你有完全填充的ExpandoObject,你可以很容易地用任何其他优秀答案提到的JSON库序列化它。

+0

这是我正在寻找,但我需要能够动态地指定字段名称(我知道,奇怪的要求)。我最终编写了一个快速且肮脏的序列化程序,但这是正确的答案。 –

+0

看起来您可以将ExpandoObject强制转换为IDictionary ',并且这将允许您在运行时确定字段名称。其中的一个例子就是MSDN链接。但是一个自定义的序列化器可能同样好。 – Phil

+0

嗯,这是一个很酷的伎俩,也许我会切换它... –

0

也许我会用JSON.NETcreate JSON from XML的能力。

然后,您可以在内存中创建一个XML并让JSON.NET将它转换为JSON。也许如果你深入挖掘API,还有其他选择。

1

这听起来像是一个等待发生的事故(即在固化结构之前创建输出),但它发生了。

自定义JSON序列化程序是一个引人注目的选项,因为它允许您轻松地从字典移动到JSON格式。我会看看开源库(JSON.NET等),看看你是否可以缩短开发时间。

我也认为设置一个稍微更结构化的格式,如XML,是一个不错的选择。使用现有的库从XML到JSON的序列化非常容易,因此您可以避免大量定制。更大的问题是数据的最终目的是什么。如果你用这些方法解决这个问题,你是否在未来创造更大的问题。

+0

JSON对象充当将翻译的字符串传输到脚本的简单容器。 –

0

Newtonsoft是具有各种漂亮的JSON工具库......其中,在即时单行串行器和解串器...检查出来,这是我最喜欢的JSON库在那里

http://james.newtonking.com/pages/json-net.aspx

如果我没有记错的话,它有一个类可以将JSON转换为.NET对象,而无需先创建.NET对象。认为这是在Json.Convert类

0

我做到这一点的方法是:

VAR串行器=新System.Web.Script.Serialization.JavaScriptSerializer(); string json = serialiser.Serialize(data); context.Response.Write(json);