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

标签 c# asp.net json claims-based-identity

我正在将 Auth0 用于我正在使用 ASP.NET Core 1.0 编写的新应用程序。到目前为止,它运行得很好,但我遇到了一些由于某种原因而困扰我的事情。

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

其中一个声明看起来像这样:

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

我的问题是,如何将该 claim 值(value)转换为我可以使用的东西?例如,能够执行诸如 IsPublisherFor.Contains("p56");

之类的操作

我尝试将值传递给 NewtonSoft.Json.JsonConvert.DeserializeObject(value) 但它引发了异常。 JsonReaderException:读取完 JSON 内容后遇到其他文本

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

最佳答案

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

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

定义以下类来接收数据:

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

关于c# - 如何在自定义声明(来自 Auth0)中反序列化 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36248458/

相关文章:

c# - 为 C# 和 C++ 应用程序编写 DLL

asp.net - Internet Explorer忽略URL中的标签

javascript - 如何从两个字符串数组制作 JSON - 第一个数组具有值,第二个数组具有相同序列的 ID

java - 更新具有Java模式的数组中的值

c# - InvalidCastException 长到 ulong

c# - 为什么这种反向阵列方法不起作用?

c# - 不同的用户不能同时使用我的 WinForms 应用程序

asp.net - UrlRewriting 在服务器上不起作用,但在本地主机上它在 asp.net 上工作正常?

c# - 通过 Visual Studio Team Services 和 Team Foundation Server 的 REST API 概述从 Microsoft vso WorkItem 访问评论

java - 序列化对象时更改字段名称