私は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 が機能するため、リフレクションを使用していないようです。質問は次のとおりです。
内部でリフレクションを使用する .net を使用せずに、2 番目の例を逆シリアル化する方法はありますか?
JSON 文字列と C# クラスの両方を変更しても問題ありません。構造 (列を含む行を含む基本オブジェクト) を保持する必要があるだけです。