Десериализация строки JSON в C #без использования отражения

Я работаю над решением для песочницы в 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 #не проблема, мне просто нужно каким-то образом сохранить базовый объект структуры (со строками, включая столбцы ).

6
задан Marc 14 August 2012 в 06:22
поделиться