我正在处理Sharepoint中的沙盒解决方案,与这个问题相关的重要限制是使用 .net 3.5,并且不允许使用反射。
示例1
如果我尝试将JSON字符串反序列化为一个简单的类,就像这样,它可以正常工作:
JSON字符串
{"field":"Picture1","url":"whatever"}
C# 类
public class PictureSetting
{
public string field { get; set; }
public string url { get; set; }
}
例子2
但是,如果我尝试反序列化一个更复杂的字符串,就会出现错误:
JSON字符串
{
"Rows": [
{
"Columns": [
{
"Width": "100"
}
]
}
]
}
C#类
internal class PageStructure
{
public List<StructureElement> Rows { get; set; }
public PageStructure()
{
Rows = new List<StructureElement>();
}
}
internal class StructureElement
{
public List<BlockAssigment> Columns { get; set; }
public StructureElement()
{
Columns = new List<BlockAssigment>();
}
}
internal class BlockAssigment
{
public string Width { get; set; }
}
错误
请求类型为'System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'的权限失败。
*反序列化
我用于反序列化这两个示例的代码只是标准的.NET代码:
var serializer = new JavaScriptSerializer();
var obj = serializer.Deserialize<PageStructure>("jsonstring");
看起来对于第一个例子,.net并没有使用反射,因为它可以正常工作。所以问题是:
有没有一种方法可以在不使用内部反射的情况下反序列化第二个例子?
修改JSON字符串和C#类都没有问题,只需保持结构(包含列的行的基本对象)即可。