Я работаю над решением для песочницы в Sharepoint, важные ограничения (в отношении этого вопроса )связаны с использованием.net 3.5, и здесь не разрешены отражения.
ПРИМЕР 1
Если я попытаюсь десериализовать строку JSON в простой класс, подобный этому, все будет работать нормально :
. СТРОКА JSON
{"field":"Picture1","url":"whatever"}
С #КЛАСС
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, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089» не удалось.
*ДЕСЕРИАЛИЗАЦИЯ
Код, который я использую для десериализации обоих примеров, просто стандартный.net:
var serializer = new JavaScriptSerializer();
var obj = serializer.Deserialize<PageStructure>("jsonstring");
Таким образом, кажется, что для первого примера.net не использует отражение, потому что это работает. Итак, вопрос:
Есть ли способ десериализовать второй пример, не используя внутреннее отражение.net?
Изменение как строки JSON, так и классов C #не проблема, мне просто нужно каким-то образом сохранить базовый объект структуры (со строками, включая столбцы ).