【问题标题】:Get Key Names from Raw JSON POST Request in C#从 C# 中的原始 JSON POST 请求中获取键名
【发布时间】:2018-05-18 15:29:57
【问题描述】:

我正在尝试读取原始 JSON POST 请求的值,并且仅将传入的字段(键)名称转换为对象。

如果我发布一个 JSON 字符串,例如:

{ 
     "FirstName": "Test",
     "LastName": "User",
     "MiddleInitials": null
}

然后我从请求正文中读取输入流后,将 JSON 字符串转换为对象:

// Read the InputStream
StreamReader reader = new StreamReader(Request.Body);
reader.BaseStream.Position = 0;
string jsonText = reader.ReadToEnd();

// Deserialize to object and read property names
object jsonObject = JsonConvert.DeserializeObject(jsonText);

然后,当我检查对象时,我看到以下内容: 如何获取键值(FirstName、LastName、MiddleInitials)?

【问题讨论】:

  • 用这三个属性创建一个类,然后反序列化该类的一个实例。
  • 嗨@Amy 说清楚(对不起,如果我以前不是),情况是我只是想读取进来的键值,因为它们可能正确也可能不正确(匹配类)。例如,如果有人传入“FirstNaem”而不是“FirstName”,则在映射到类时该值将被忽略。
  • @kyle_13 这是一个重要的细节。我建议将其编辑到您的问题中。
  • @kyle_13 通常,当某些 JSON 与预期模型不匹配时,应该会导致 400 BAD REQUEST 错误。

标签: c# json asp.net-mvc


【解决方案1】:

NewtonSoft JSON 库允许您使用泛型将 JSON 反序列化为特定类型,请查看 this 文档。如果 JSON 字符串与您尝试反序列化的对象不匹配,它也会引发错误。

我偶尔会做的另一个选择是将 JSON 字符串反序列化为 dynamic 而不是 object。它使您不必为您期望的每个响应创建一个类型。以this question/answer 为例。

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多