我有一个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
- 文件中,以便像MyConstants.HttpMethods.Put
内的javascript
一样使用它?
使用
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};
。
问题似乎与使用muliple嵌套其他Type
的{{1}}上的反射更相关。
答案 0 :(得分:1)
您的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;
}
课程中没有课程实例。这就是它不可见的原因。
以下简化示例:
<input id="radio2" type="radio" value="2" name="radio" checked>
答案 1 :(得分:0)
您需要提交递归来构建字典:
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
也可以使用。