Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#(从ASP.NET资源文件)中动态创建JSON对象?_C#_Asp.net_Json_Resources - Fatal编程技术网

如何在c#(从ASP.NET资源文件)中动态创建JSON对象?

如何在c#(从ASP.NET资源文件)中动态创建JSON对象?,c#,asp.net,json,resources,C#,Asp.net,Json,Resources,我需要将资源文件(.resx)中的字符串序列化为JSON对象。资源文件的键在不断变化,因此我不能仅仅创建一个接受适当值的C#对象。它需要一个动态的解决方案。我能够遍历文件的键值对,但是我需要一种简单的方法将它们序列化为JSON 我知道我能做到: Object thing = new {stringOne = StringResource.stringOne; ...} 但是,我更喜欢这样的东西: Object generic = {} foreach (DictionaryEntry entr

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

我知道我能做到:

Object thing = new {stringOne = StringResource.stringOne; ...}
但是,我更喜欢这样的东西:

Object generic = {}
foreach (DictionaryEntry entry in StringResource) {
    generic.(entry.Key) = entry.Value
}
或者我应该创建一个定制的JSON序列化程序来逐段构造对象(例如,foreach循环,在每个循环中附加JSON字符串的一部分)

编辑
最后,我编写了一个快速JSON序列化程序,一次构造一个字符串字段。我不想包含整个JSON库,因为这是JSON对象的唯一用途(至少现在是这样)。最终,我想要的可能是不切实际的,并且不存在,因为它的功能由其他数据结构更好地服务。谢谢你的回答

我可能会使用和能够使用


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

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

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

我还认为,以更结构化的格式(如XML)进行设置是一个不错的选择。使用现有库将XML序列化为JSON非常容易,因此可以避免大量定制/


更大的问题是这些数据最终将用于什么目的。如果您使用这两种方法中的任何一种来解决这个问题,您是否会在未来制造更大的问题。

Newtonsoft是一个拥有各种漂亮JSON工具的库……其中,动态的单行序列化程序和反序列化程序……请查看,它是我最喜欢的JSON库

如果我没记错的话,它有一个类可以将JSON转换为.NET对象,而不必先创建.NET对象。假设它在Json.Convert类中,我这样做的方式是:

var serialiser=new System.Web.Script.Serialization.JavaScriptSerializer(); string json=serialiser.Serialize(数据); context.Response.Write(json)

如果你使用的是C#4.0,你应该看看它的神奇之处。它是一个允许您在运行时使用.NET4.0中的新DLR动态添加和删除属性的对象。是用于ExpandooObject的一个很好的示例


一旦您拥有了完全填充的ExpandooObject,您就可以使用其他优秀答案中提到的任何JSON库轻松地序列化它。

这就是我要寻找的,但我也需要能够动态指定字段名(我知道,这是一个奇怪的要求)。最后,我编写了一个快速而肮脏的序列化程序,实现了这一点,但这是正确的答案。看起来您可以将ExpandooObject强制转换为
IDictionary
,这将允许您在运行时确定字段名。下面的MSDN链接就是一个例子。但是自定义序列化程序可能也一样好,JSON对象充当一个简单的容器,用于将翻译后的字符串传输到脚本。