将嵌套的 c# 类型转换为 json,并在 javascript 中使用它
Convert nested c#-type to json and use it in javascript
我有一个C#
类作为应用程序使用的常量值的容器。
public abstract class MyConstants
{
public abstract class HttpMethods
{
public const string Put = "PUT";
public const string Post = "POST";
public const string Get = "GET";
}
public abstract class ContainerKeys
{
public abstract class GlobalModal
{
public const string DialogId = "6698CB2F-2948-45D9-8902-2C13A7ED6335";
}
}
public const int MaximumImageUploadSize = 3 * 1024 * 1024; // 3MB
public const int MaximumDocumentUploadSize = 5 * 1024 * 1024; // 5MB
}
如何将其转换为 json,然后将其复制到内部的 javascript
-文件中以像javascript
内部MyConstants.HttpMethods.Put
一样使用它?
用
var constants = typeof(MyConstants).GetFields().ToDictionary(x => x.Name, x => x.GetValue(null));
var json = new JavaScriptSerializer().Serialize(constants);
return JavaScript(json + ";");
仅返回没有所有嵌套类/常量的{"MaximumImageUploadSize":3145728,"MaximumDocumentUploadSize":5242880};
。
这个问题似乎更多地与在具有多个嵌套其他Type
的Type
上使用反射有关。
您的MyConstants
类中没有类的实例。这就是为什么它不可见的原因。
简化示例如下:
public abstract class MyConstants
{
public class HttpMethods
{
public const string Put = "PUT";
public const string Post = "POST";
public const string Get = "GET";
}
public const int MaximumImageUploadSize = 3 * 1024 * 1024; // 3MB
public const int MaximumDocumentUploadSize = 5 * 1024 * 1024; // 5MB
public const HttpMethods HttpMethodObj;
}
你需要递归来构建字典:
例
Dictionary<string, object> TypeToDictionary(Type type)
{
var ret = type.GetFields().ToDictionary(x => x.Name, x => x.GetValue(null));
foreach (var nestedType in type.GetNestedTypes())
{
ret.Add(nestedType.Name, TypeToDictionary(nestedType));
}
return ret;
}
用法
var dictionary = TypeToDictionary(typeof(MyConstants));
var json = JsonConvert.SerializeObject(dictionary, Newtonsoft.Json.Formatting.Indented);
输出
{
"MaximumImageUploadSize": 3145728,
"MaximumDocumentUploadSize": 5242880,
"HttpMethods": {
"Put": "PUT",
"Post": "POST",
"Get": "GET"
},
"ContainerKeys": {
"GlobalModal": {
"DialogId": "6698CB2F-2948-45D9-8902-2C13A7ED6335"
}
}
}
注意
我用过Newtonsoft.JSON
但JavaScriptSerializer
也应该有效。
相关文章:
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 从数组中删除重复条目,并在javascript中按顺序排列
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- 如何使用javascript localStorage保存用户选择并在不同的html页面中显示
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 如何获取javascript输入并在html中调用它
- javascript从选中的复选框中检索输入值,并在同一网页中显示多个html文件
- 使用javascript读取本地XML文件并在html页面中显示
- 如何在打印前等待javascript文件加载twitter,并在打印后关闭选项卡
- 在Javascript中解析json并在html上创建表
- javascript window.open(),并在新窗口中搜索DOM
- Javascript性能-在dom上迭代并添加侦听器
- 如何使用Javascript获取当前页面URL,并在<a href="[the_URL]”>
- 如何将多维传递给javascript并在多维中再次存储
- 调用javascript并在右侧框架中显示结果
- 如果路径中有一个querystring, Firefox是否缓存javascript并在没有请求的情况下使用它?
- 如何使用JavaScript并在Kendo UI模板中打印结果