【问题标题】:Creating data model to accept all JSON C# [duplicate]创建数据模型以接受所有 JSON C# [重复]
【发布时间】:2018-01-31 22:04:15
【问题描述】:

所以我使用名为 Chat 的数据模型创建了一个端点,它将接受这种 JSON 形式的数据并将其存储在数据库中。

[{
    "ID": "123456",
    "Chat": [{
            "ID": "1",
            "Message": "User: that's a nice car Dylan: thanks",
            "PostedBy": "Dylan",
            "PostedOn": "2018-01-23T18:25:43.511Z"
        },
        {
            "ID": "2",
            "Message": "User: that's a really nice car Terry: thanks ",
            "PostedBy": "Terry",
            "PostedOn": "2018-02-23T18:25:43.511Z"
        },
        {
            "ID": "3",
            "Message": "User: that's the best car Roger: thanks",
            "PostedBy": "Roger",
            "PostedOn": "2018-03-23T18:25:43.511Z"
        }
    ]
}]

这是我目前拥有的,当我将数据发送到端点时,它只存储 ID,数据库中没有其他内容。对于如何更改我的模型以接受正在发送的全部数据的任何想法/指导,我们将不胜感激。

public class Chat
{
    public string ID { get; set; }

    public string message { get; set; }

    public string postedBy { get; set; }

    public DateTime? postedOn { get; set;}
}

【问题讨论】:

  • 你可以从 json2csharp.com 开始
  • 您没有展示如何从 A 点到达 B 点,而是“消息”!=“消息”。注意外壳如何匹配有效的属性?如果您允许,VS 将为您构建课程。请阅读How to Ask 并采取tour
  • 尝试匹配属性的大小写...即MessagePostedByPostedOn
  • 1) 请指定您正在使用的框架和/或序列化程序。是wcf吗? asp.net-web-api2? asp.net-core?不同的框架使用不同的序列化器,有些区分大小写 (DataContractJsonSerializer),有些则不区分 (Json.NET)。 2)请分享端点方法的实际签名,以便我们了解它如何使用您当前的数据模型。 minimal reproducible example 是理想的;没有它,我们只是在猜测。

标签: c# json entity-framework


【解决方案1】:

我在这里可能错了,但在我看来,您似乎正在使用一个表示单个消息实例的类(Chat 类)来尝试存储整个聊天数据列表。

如果我是对的,它实际存储ID 的唯一原因是它碰巧在您的数据中的两个不同级别具有相同的名称;一个用于外部列表(整个集合 - 这是存储的内容),一个用于每个内部聊天项目。

尝试添加这个类,并改用它(或者更确切地说,因为它实际上包含您已经存在的类Chat的实例列表):

public class ChatThread
{
    public string ID { get; set; }
    public IEnumerable<Chat> Chat { get; set; }
}

【讨论】:

    【解决方案2】:

    存储在您的对象上的ID 不是来自Chat 对象的ID,而是您的聊天对象通用的更高的ID 定义。

    如果我们不考虑您没有考虑到 C# 是区分大小写的语言这一事实​​,那么您真的很接近。 “更高”层由字符串IDChat 对象数组组成,因此您应该创建一个包含这两个属性定义的Class

    public class JsonClass
    {
        public string ID { get; set; }
        public Chat[] Chat { get; set; }
    }
    
    public class Chat
    {
        public string ID { get; set; }
        public string Message { get; set; }
        public string PostedBy { get; set; }
        public DateTime PostedOn { get; set; }
    }
    

    由于JsonClass ID 属性存在多个Chat 对象,因此您必须将其制成某种集合。我选择了一个数组,但您可以使用其他Collection 对象,例如List

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 2015-11-19
      • 1970-01-01
      • 2023-03-08
      • 2013-07-14
      • 2023-03-20
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多