gpt4 book ai didi

c# - 在不使用反射的情况下在 C# 中反序列化 JSON 字符串

转载 作者:太空狗 更新时间:2023-10-29 21:54:56 26 4
gpt4 key购买 nike

我正在 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 内部不使用反射的情况下反序列化第二个示例?

修改 JSON 字符串和 C# 类都没有问题,我只需要以某种方式保持结构(包含行和列的基础对象)。

最佳答案

我怀疑最大的问题实际上是在这里:

public class PictureSetting // public, works

对比

internal class PageStructure // non-public, permission denied

在我看来,沙箱正在阻止非公共(public)类型/成员的反射。这将与大多数沙箱一致,例如 Silverlight:您可以使用反射,但仅限于 could 能够正常执行的操作——即访问公共(public)类型/成员。尝试将 PageStructureStructureElementBlockAssigment 制作成 public 类。

关于c# - 在不使用反射的情况下在 C# 中反序列化 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11946796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com