如何在自定义声明中反序列化 JSON(来自 Auth0)?

How to deserialize JSON inside a custom claim (from Auth0)?

我将 Auth0 用于我使用 ASP.NET Core 1.0 编写的新应用程序。到目前为止它运行良好,但出于某种原因我遇到了一些让我难过的事情。

当用户登录时,Auth0 会将声明传回我的应用程序。 Auth0 能够为用户添加自定义数据,它以 JSON 格式存储并作为声明列表出现。

其中一项声明如下所示:

Type "app_metadata"
Value "\"IsPublisherFor\":[\"p56\",\"p124\",\"p258\"]"
ValueType "JSON"

我的问题是,我如何将声明价值转换成我可以使用的东西?例如,能够执行类似 IsPublisherFor.Contains("p56");

的操作

我试图将值传递给 NewtonSoft.Json.JsonConvert.DeserializeObject(value) 但它抛出异常。 JsonReaderException: Additional text encountered after finished reading JSON content

有什么方法可以干净地转换它?

您可能需要将 JSON 字符串用花括号括起来。您通常需要单个顶级数组或对象才能具有有效的 JSON。不知道 NewtonSoft,但使用 JavascriptSerializer,这有效:

var json = "{\"IsPublisherFor\":[\"p56\",\"p124\",\"p258\"]}";
var serializer = new JavaScriptSerializer();
stuff obj = serializer.Deserialize<stuff>(json);

定义以下class接收数据:

public class stuff
{
    public string[] IsPublisherFor { get; set; }
}