Estoy trabajando en una solución de espacio aislado en Sharepoint, las restricciones importantes (con respecto a esta pregunta) debido a que son el uso de .NET 3.5 y no se permiten las reflexiones.Deserializar cadena JSON en C# sin usar el reflejo
Ejemplo 1
Si trato de deserializar como cadena JSON en una clase simple como esto funciona bien:
JSON CADENA
{"field":"Picture1","url":"whatever"}
C# CLASE
public class PictureSetting
{
public string field { get; set; }
public string url { get; set; }
}
Ejemplo 2
Pero si trato de deserializar un poco cadena más compleja consigo un error:
JSON CADENA
{
"Rows": [
{
"Columns": [
{
"Width": "100"
}
]
}
]
}
C# CLASES
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
Solicitud de permiso de tipo 'System.Security.Permissions.ReflectionPermission mscorlib versión = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 ' ha fallado.
* Deserialización
El código que utilizo para la deserialización de ambos ejemplos es simplemente .net estándar:
var serializer = new JavaScriptSerializer();
var obj = serializer.Deserialize<PageStructure>("jsonstring");
Así que parece que para el primer ejemplo .net es no usando la reflexión porque eso funciona. Entonces la pregunta es:
¿Hay alguna manera de deserializar el segundo ejemplo sin tener .net usando la reflexión internamente?
Modificar las cadenas JSON y C# no son un problema, solo tengo que mantener la estructura (objeto base con filas, incluidas las columnas) de alguna manera.
Sí, eso es todo! Impresionante, muchas gracias! Lo cambié a público y funciona. Entonces, parece que el sandbox NO está prohibiendo el reflejo en general, pero no es público como usted dijo. Interesante. Aprendo un poco todos los días :) – Marc