我正在研究Sharepoint中的沙盒解决方案,这是由于使用.net 3.5而导致的重要限制(与此问题有关),并且没有允许反射。在C#中反序列化JSON字符串而不使用反射
例1
如果我尝试反序列化的JSON字符串转换为一个简单的类像这样的正常工作:
JSON字符串
{"field":"Picture1","url":"whatever"}
C#CLASS
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; }
}
ERROR
请求类型System.Security.Permissions.ReflectionPermission,mscorlib程序”的许可,版本= 2.0.0.0,文化=中性公钥= b77a5c561934e089 '失败。
* 反序列化
我用的这两个例子反序列化的代码只是标准的.NET:
var serializer = new JavaScriptSerializer();
var obj = serializer.Deserialize<PageStructure>("jsonstring");
如此看来,第一个例子.NET是而不是使用反射,因为它的工作原理。所以问题是:
有没有反序列化的第二个例子没有.net使用内部反射?
修改JSON字符串和C#类都没有问题,我只需要保持结构(含有列的基本对象包含列)。
是的,就是这样!太棒了,非常感谢你!我将它改为公共,它可以工作。所以看起来,沙箱并不像你所说的那样禁止一般的反射,而是非公开的。有趣。我每天学习一点:) – Marc 2012-08-14 06:57:19