C# 用C语言中的嵌套列表反序列化JSON#

C# 用C语言中的嵌套列表反序列化JSON#,c#,json,json-deserialization,C#,Json,Json Deserialization,如何用C#中的嵌套列表反序列化JSON,我的活动总是空的。 请帮帮我。我不知道我哪里出了问题。任何帮助都将不胜感激 我正在尝试反序列化代码,但没有获取活动。我的项目是: using System; using System.Collections.Generic; using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; public class Program { public static void Ma

如何用C#中的嵌套列表反序列化JSON,我的活动总是空的。 请帮帮我。我不知道我哪里出了问题。任何帮助都将不胜感激

我正在尝试反序列化代码,但没有获取活动。我的项目是:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;

public class Program
{
    public static void Main()
    {
        string json = @"
            {
  ""Title"": ""test"",
  ""Id"": ""SR21576"",
  ""CreatedDate"": ""2016-12-10T09:21:06+03:30"",
  ""DisplayName"": ""SR21576 : test"",
  ""Description"": ""10"",
  ""AlternateContactMethod"": null,
  ""AffectedUser"": null,
  ""AssignedToUser"": ""XXX\\BB Team"",
  ""CustomerCode"": ""00000000-0000-0000-0000-000000000000"",
  ""CustomerName"": null,
  ""ContractId"": ""00000000-0000-0000-0000-000000000000"",
  ""ContractTitle"": null,
  ""ContractDetailsId"": ""00000000-0000-0000-0000-000000000000"",
  ""ContractDetailsTitle"": null,
  ""CRMLink"": null,
  ""LeadId"": ""00000000-0000-0000-0000-000000000000"",
  ""LeadTitle"": null,
  ""Urgency"": ""b02d9277-a9fe-86f1-e95e-0ba8cd4fd075"",
  ""Priority"": ""1e070214-693f-4a19-82bb-b88ee6362d98"",
  ""Source"": ""57e11419-ac27-a6fa-97f1-0ec2a9722807"",
  ""Area"": ""3c5e6037-b057-5745-4d89-e95f67d3236b"",
  ""SupportGroup"": ""ae536997-8124-85e7-496e-225b7991a450"",
  ""Attachments"": [ ],
  ""Activities"": [
    {
      ""<Id>k__BackingField"": ""ffe60a69-f3c8-adbe-9bbd-4050d766cc81"",
      ""<ActivityID>k__BackingField"": ""MA21578"",
      ""<Title>k__BackingField"": ""a"",
      ""<Status>k__BackingField"": ""Ready"",
      ""<TypeOfActivity>k__BackingField"": 1
    },
    {
      ""<Id>k__BackingField"": ""91286e74-6a39-964f-040f-5daf99e84792"",
      ""<ActivityID>k__BackingField"": ""RA21579"",
      ""<Title>k__BackingField"": ""b"",
      ""<Status>k__BackingField"": ""Ready"",
      ""<TypeOfActivity>k__BackingField"": 0
    },
    {
      ""<Id>k__BackingField"": ""9754f1a1-d37b-265a-087a-f6688808dbeb"",
      ""<ActivityID>k__BackingField"": ""MA21577"",
      ""<Title>k__BackingField"": ""c"",
      ""<Status>k__BackingField"": ""Active"",
      ""<TypeOfActivity>k__BackingField"": 1
    },
    {
      ""<Id>k__BackingField"": ""d959cac5-cb78-a3fb-09e2-76da1b5381b2"",
      ""<ActivityID>k__BackingField"": ""MA21580"",
      ""<Title>k__BackingField"": ""d"",
      ""<Status>k__BackingField"": ""Ready"",
      ""<TypeOfActivity>k__BackingField"": 1
    }
  ],
  ""Status"": ""InProgress""
}";


        ServiceRequest items = JsonConvert.DeserializeObject<ServiceRequest>(json);

        Console.WriteLine("Area: " + items.Area);
        Console.WriteLine("CRMLink: " + items.CRMLink);

        Console.WriteLine("Number of Activities: " + items.Activities.Count);

        int i = 0;
        //Activities are null why???????
        foreach (var type in items.Activities)
        {
            i++;
            Console.WriteLine("Activities item number " + i);
            Console.WriteLine("ActivityID: " + type.ActivityID);
            Console.WriteLine("Id: " + type.Id);
            Console.WriteLine("Status: " + type.Status);
            Console.WriteLine("Title: " + type.Title);
            Console.WriteLine("TypeOfActivity: " + type.TypeOfActivity);
            Console.WriteLine();
        }
    }
}

[Serializable]
public class Activity
{
    public Guid Id { get; set; }
    public String ActivityID { get; set; }
    public String Title { get; set; }
    public String Status { get; set; }

    public ActivityType TypeOfActivity { get; set; }
}

[Serializable]
public enum ActivityType
{
    ReviewActvity,
    ManualActivity
}

[Serializable]
public class Attachment
{
    [Required]
    public string FileName { get; set; }
    [Required]
    public string ServerFileName { get; set; }
    public bool ToRemove { get; set; }
    [Required]
    public string AttachedByUser { get; set; }

}

[Serializable]
public class ServiceRequest
{
    [Required]
    public string Title { get; set; }
    public String Id { get; set; }
    public DateTime CreatedDate { get; set; }
    public string DisplayName { get; set; }
    [Required]
    public string Description { get; set; }
    public string AlternateContactMethod { get; set; }
    public string AffectedUser { get; set; }
    public string AssignedToUser { get; set; }
    public Guid CustomerCode { get; set; }
    public string CustomerName { get; set; }
    public Guid ContractId { get; set; }
    public string ContractTitle { get; set; }
    public Guid ContractDetailsId { get; set; }
    public string ContractDetailsTitle { get; set; }
    public string CRMLink { get; set; }
    public Guid LeadId { get; set; }
    public string LeadTitle { get; set; }
    public Guid Urgency { get; set; }
    public Guid Priority { get; set; }
    public Guid Source { get; set; }
    public Guid Area { get; set; }
    public Guid SupportGroup { get; set; }
    public List<Attachment> Attachments { get; set; }
    public List<Activity> Activities { get; set; }
    public string Status { get; set; }
}
使用系统;
使用System.Collections.Generic;
使用Newtonsoft.Json;
使用System.ComponentModel.DataAnnotations;
公共课程
{
公共静态void Main()
{
字符串json=@”
{
“标题”:“测试”,
“Id”:“SR21576”,
“CreatedDate”:“2016-12-10T09:21:06+03:30”,
“显示名称”:“SR21576:测试”,
“说明”:“10”,
“AlternateContactMethod”:null,
“AffectedUser”:null,
“AssignedToUser”:“XXX\\BB团队”,
“客户代码”:“00000000-0000-0000-0000-00000000”,
“CustomerName”:null,
“收缩的”:“00000000-0000-0000-0000-000000000000”,
“ContractTitle”:null,
“ContractDetailsId:”00000000-0000-0000-0000-000000000000“,
“ContractDetailsTitle”:null,
“CRMLink”:空,
“LeadId”:“00000000-0000-0000-0000-00000000”,
“LeadTitle”:空,
“紧急情况”:“b02d9277-a9fe-86f1-e95e-0ba8cd4fd075”,
“优先级”:“1e070214-693f-4a19-82bb-b88ee6362d98”,
“来源”:“57e11419-ac27-a6fa-97f1-0ec2a9722807”,
“区域”:“3c5e6037-b057-5745-4d89-e95f67d3236b”,
“支持组”:“ae536997-8124-85e7-496e-225b7991a450”,
“附件”:[],
“活动”:[
{
“k_ubackingfield”:“ffe60a69-f3c8-adbe-9bbd-4050d766cc81”,
“k__BackingField”:“MA21578”,
“k_ubackingfield”:“a”,
“k__BackingField”:“Ready”,
“k__BackingField”:1
},
{
“k__BackingField”:“91286e74-6a39-964f-040f-5daf99e84792”,
“k_ubackingfield”:“RA21579”,
“k_ubackingfield”:“b”,
“k__BackingField”:“Ready”,
“k__BackingField”:0
},
{
“k__BackingField”:“9754f1a1-d37b-265a-087a-f6688808dbeb”,
“k__BackingField”:“MA21577”,
“k_ubackingfield”:“c”,
“k__BackingField”:“活动”,
“k__BackingField”:1
},
{
“k_ubackingfield”:“d959cac5-cb78-a3fb-09e2-76da1b5381b2”,
“k_ubackingfield”:“MA21580”,
“k_ubackingfield”:“d”,
“k__BackingField”:“Ready”,
“k__BackingField”:1
}
],
“状态”“:”“正在进行”
}";
ServiceRequestItems=JsonConvert.DeserializeObject(json);
控制台写入线(“区域:+项目区域);
控制台.WriteLine(“CRMLink:+items.CRMLink”);
Console.WriteLine(“活动数:+项.活动.计数”);
int i=0;
//活动为空为什么???????
foreach(items.Activities中的var类型)
{
i++;
控制台写入线(“活动项目编号”+i);
Console.WriteLine(“ActivityID:+type.ActivityID”);
Console.WriteLine(“Id:+type.Id”);
Console.WriteLine(“状态:+type.Status”);
Console.WriteLine(“标题:+类型.Title”);
Console.WriteLine(“TypeOfActivity:+type.TypeOfActivity”);
Console.WriteLine();
}
}
}
[可序列化]
公共课堂活动
{
公共Guid Id{get;set;}
公共字符串ActivityID{get;set;}
公共字符串标题{get;set;}
公共字符串状态{get;set;}
公共活动类型活动类型{get;set;}
}
[可序列化]
公共枚举活动类型
{
回顾性,
手工活动
}
[可序列化]
公共类附件
{
[必需]
公共字符串文件名{get;set;}
[必需]
公共字符串ServerFileName{get;set;}
公共bool删除{get;set;}
[必需]
公共字符串AttachedByUser{get;set;}
}
[可序列化]
公共类服务请求
{
[必需]
公共字符串标题{get;set;}
公共字符串Id{get;set;}
公共日期时间CreatedDate{get;set;}
公共字符串DisplayName{get;set;}
[必需]
公共字符串说明{get;set;}
公共字符串AlternateContact方法{get;set;}
公共字符串影响用户{get;set;}
分配给用户的公共字符串{get;set;}
公共Guid客户代码{get;set;}
公共字符串CustomerName{get;set;}
公共Guid压缩{get;set;}
公共字符串ContractTitle{get;set;}
公共Guid ContractDetailsId{get;set;}
公共字符串ContractDetailsTitle{get;set;}
公共字符串CRMLink{get;set;}
公共Guid LeadId{get;set;}
公共字符串LeadTitle{get;set;}
公共Guid{get;set;}
公共Guid优先级{get;set;}
公共Guid源{get;set;}
公共Guid区域{get;set;}
公共Guid支持组{get;set;}
公共列表附件{get;set;}
公共列表活动{get;set;}
公共字符串状态{get;set;}
}

最初为您的
活动
集合生成JSON的人选择序列化对象的字段。由于该类完全由自动实现的属性组成,因此您将获得

要强制Json.NET反序列化
活动
的公共和私有字段,而不是其属性,请使用以下标记类型:

或者,修复最初生成JSON的代码,以优先于字段序列化属性。这似乎是一个有意识的选择,因为根类型
ServiceRequest
序列化了其属性,而不是字段


示例。

方法1:从
活动
类中删除
[Serializable]
属性

如果不是严格必要的,删除将阻止默认的
DataContractJsonSerializer
生成额外的标记

方法2:将序列化程序配置为忽略
[Serializable]<
[Serializable]
[JsonObject(MemberSerialization.Fields)]
public class Activity
{
    public Guid Id { get; set; }
    public String ActivityID { get; set; }
    public String Title { get; set; }
    public String Status { get; set; }

    public ActivityType TypeOfActivity { get; set; }
}
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new DefaultContractResolver { IgnoreSerializableAttribute = true };