【问题标题】:Json not mapping subarray of elements to my objectJson没有将元素的子数组映射到我的对象
【发布时间】:2012-04-03 14:37:21
【问题描述】:

我们下载了一个 json 序列化器和反序列化器,它读取配置文件对象 find,但它没有放入列表中的 Client 项。这是json

{"Profile": [{
                "Name":"Joe",
                "Last :"Doe",
                 "Client":
                         {
                          "ClientId":"1",
                          "Product":"Apple",
                          "Message":"Peter likes apples"
                          },
                  "Date":"2012-02-14"
                 }]}

所以在我的个人资料课程中,我有

public class Profile
  {
     public string Name {get; set;}
     public string Last {get; set;}
     public List<Client> Client {get; set;}
     public DateTime dDate {get; set;}   

        public Profile()
        {
        }
        public Profile BuildEntity()
        {
          Profile profile = new Profile();
          profile.Name = this.Name;
          profile.Last = this.LastName;
          profile.Client = this.client;
          profile.dDate = this.dDate;
          return dDate;

        }
  }

现在,当我调试时,除了列表之外,所有项目都有值。有谁知道它可能是什么?

注意:这将发布到我们的 Profile.asmx 网络服务

问候

【问题讨论】:

  • 很好地省略了一个相关的代码片段。另外,"Does anyone know what it might be?"Mebe 是长颈鹿是个什么样的问题。
  • 嘘,谢谢你的注意,我是 JSON 和 Web 服务的新手。我很乐意提供更多信息。哪一段是相关的代码?没必要粗鲁:)
  • dDateDate 是什么关系?另外,您使用的是什么 JSON 库?
  • LB 帮助我达到了这一点,谢谢,我不知道为什么它没有映射到客户端
  • @user710502 我发布了here 一个完整的工作代码。它有什么问题?

标签: c# asp.net json


【解决方案1】:

您将客户声明为:

public List<Client> Client {get; set;}

但是你的数据看起来像这样:

"Client":
{
    "ClientId":"1",
    "Product":"Apple",
    "Message":"Peter likes apples"
}

我认为预期的数据更像:

"Client":
[{
    "ClientId":"1",
    "Product":"Apple",
    "Message":"Peter likes apples"
}]

反序列化可能需要一个对象数组,而不仅仅是一个对象。

【讨论】:

    【解决方案2】:

    也许客户端应该是一个数组,而不是一个对象,因为你建模它是一个列表。试试这个:

                  "Client":
                         [{
                          "ClientId":"1",
                          "Product":"Apple",
                          "Message":"Peter likes apples"
                          }],
    

    【讨论】:

      【解决方案3】:

      以后我会推荐使用 LinqPad 进行测试然后实施。下面是工作代码示例。

      字符串杰森 = @" {““轮廓””: [{ ""姓名"":""乔"", ""最后"":""Doe"", ““客户””: { ""ClientId"":""1"", ""产品"":""苹果"", ""消息"":""彼得喜欢苹果"" }, ""日期"":""2012-02-14"" }]} "; 无效的主要() { var jason = JsonConvert.SerializeObject(Container.Instance()); 杰森.转储(); 杰森.转储(); JsonConvert.DeserializeObject(JASON).Dump(); } // 这里定义其他方法和类 类容器 { 公共容器() { 配置文件 = 新列表 { }; } 公共列表配置文件{获取;放; } 公共静态容器实例() { var c = 新容器(); c.Profile.Add( 新的配置文件 { 名称=“乔”, 最后 = "Doe", 日期 = "2012-02-14", Client = new Client{ ClientId = 1, Product = "Apple", Message = "Peter 喜欢苹果" } }); 返回 c; } } 类客户 { 公共 int ClientId { 获取;放; } 公共字符串产品 { 获取;放; } 公共字符串消息 { 获取;放; } } 班级简介 { 公共字符串名称 {get;放;} 公共字符串最后 {get;放;} 公共客户客户{get;放;} 公共字符串日期 {get;放;} 公共档案() { } }

      【讨论】:

      • PS:我也推荐使用 JSON.NET
      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 2019-05-27
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2016-06-24
      • 2019-04-28
      相关资源
      最近更新 更多