我正在研究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