Pracuję nad rozwiązaniem piaskownicy w Sharepoint, ważne ograniczenia (dotyczące tego pytania) z powodu korzystania z .net 3.5 i nie ma dopuszczalnych odbić.Deserializować ciąg znaków JSON w języku C# bez użycia refleksji
PRZYKŁAD 1
Gdy próbuję deserializowania jako JSON ciąg do prostego klasy jak to działa dobrze:
JSON STRING
{"field":"Picture1","url":"whatever"}
C# CLASS
public class PictureSetting
{
public string field { get; set; }
public string url { get; set; }
}
Przykład 2
Ale gdy próbuję deserializowania nieco bardziej złożony ciąg otrzymuję błąd:
JSON STRING
{
"Rows": [
{
"Columns": [
{
"Width": "100"
}
]
}
]
}
C# KLASY
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
Wniosek o pozwolenie typu „System.Security.Permissions.ReflectionPermission, mscorlib, Version = 2.0.0.0, Culture = neutral, TokenKluczaPublicznego = b77a5c561934e089 "nie udało się.
* deserializacjia
Kod używam do deserializacji obu przykładów jest tylko standard .net:
var serializer = new JavaScriptSerializer();
var obj = serializer.Deserialize<PageStructure>("jsonstring");
Wygląda więc na to, że w pierwszym przykładzie .net jest nie za pomocą refleksji, ponieważ to działa. Tak więc pytanie brzmi:
Czy istnieje sposób na deserializację drugiego przykładu bez konieczności .net za pomocą odbicia wewnętrznego?
Modyfikowanie obu ciągów JSON i klas C# nie stanowi problemu, po prostu muszę zachować strukturę (obiekt podstawowy z wierszami włącznie z kolumnami).
Tak, to jest to! Świetnie, dziękuję bardzo! Zmieniłem go na publiczny i działa. Wydaje się więc, że piaskownica NIE przeszkadza ogólnie, ale niepubliczna, jak powiedziałeś. Ciekawy. Każdego dnia uczę się trochę :) – Marc