c# - 将复杂(嵌套)JSON 反序列化为 C# 对象

标签 c# .net arrays json serialization

我一直致力于反序列化来自 API 的复杂 JSON 响应。我是 C# 和 .NET 的新手,所以我真的不知道如何继续。

我想做的事情:

我想收集 JSON 响应中的所有项目并将它们放入键值对中,然后将它们返回到控制台应用程序的列表中以用于测试目的。

当我调试时,它工作得非常好,我可以看到它按预期映射了所有键值对。我的努力是返回控制台应用程序列表中的所有内容。

这是我的“模型”类代码。

using System;

namespace ModelsClass
{

public class Rootobject
{
    public int code { get; set; }
    public string message { get; set; }
    public object profiling { get; set; }
    public int count { get; set; }
    public int skip { get; set; }
    public int limit { get; set; }
    public object next_page { get; set; }
    public object previous_page { get; set; }
    public Additional_Meta additional_meta { get; set; }
    public MeterData[] data { get; set; }
}

public class Additional_Meta
{
    public And[] and { get; set; }
}

public class And
{
    public bool deleted { get; set; }
    public Or[] or { get; set; }
}

public class Or
{
    public Holder_Id holder_id { get; set; }
    public RootHolder_Id rootholder_id { get; set; }
}

public class Holder_Id
{
    public string holderId { get; set; }
}

public class RootHolder_Id
{
    public string rootId { get; set; }
}

public class MeterData
{
    public string _id { get; set; }
    public string ean { get; set; }
    public object name { get; set; }
    public Holder holder { get; set; }
    public Root root { get; set; }
    public Assigner assigner { get; set; }
    public DateTime created { get; set; }
    public object[] children { get; set; }
    public string address { get; set; }
    public string timezone { get; set; }
    public string control_level { get; set; }
    public string billing_category { get; set; }
    public int generation { get; set; }
    public object[] tags { get; set; }
    public string box { get; set; }
    public bool revoked { get; set; }
    public string[] metrics { get; set; }
    public string type { get; set; }
    public Consumption_Stats consumption_stats { get; set; }
    public object readings_stats { get; set; }
    public bool has_active_complaints { get; set; }
    public object representation { get; set; }
    public object open_channel_ids { get; set; }
    public object on_hold { get; set; }
    public object last_sla_comment { get; set; }
    public object location { get; set; }
    public object[] meter_readers { get; set; }
    public int collection_window { get; set; }
    public object memo { get; set; }
}

public class Holder
{
    public string _id { get; set; }
    public string name { get; set; }
    public string username { get; set; }
}

public class Root
{
    public string _id { get; set; }
    public Holder1 holder { get; set; }
}

public class Holder1
{
    public string _id { get; set; }
    public string name { get; set; }
    public string entity_type { get; set; }
}

public class Assigner
{
    public string _id { get; set; }
    public string name { get; set; }
    public string username { get; set; }
    public Manager manager { get; set; }
}

public class Manager
{
    public object _id { get; set; }
}

public class Consumption_Stats
{
    public Energy energy { get; set; }
}

public class Energy
{
    public Hour hour { get; set; }
    public Day day { get; set; }
    public Month month { get; set; }
}

public class Hour
{
    public string count { get; set; }
    public string sum { get; set; }
    public string max { get; set; }
    public string last { get; set; }
    public string min { get; set; }
    public string first { get; set; }
}

public class Day
{
    public string count { get; set; }
    public string sum { get; set; }
    public string max { get; set; }
    public string last { get; set; }
    public string min { get; set; }
    public string first { get; set; }
}

public class Month
{
    public string count { get; set; }
    public string sum { get; set; }
    public string max { get; set; }
    public string last { get; set; }
    public string min { get; set; }
    public string first { get; set; }
}
}

这是我的“WriteLine”命令代码,用于尝试在列表中列出所有键值对。

using System;

class ConsoleAppClass
{
    static void Main()
    {
        string json2 = @"{""code"":200,""message"":""OK"",""profiling"":null,""count"":6,""skip"":0,""limit"":50,""next_page"":null,""previous_page"":null,""additional_meta"":{""$and"":[{""deleted"":false},{""$or"":[{""holder_id"":{""$id"":""5543677f37c6b65f008b46e4""}},{""root.holder._id"":{""$id"":""5543677f37c6b65f008b46e4""}}]}]},""data"":[{""_id"":""5825c6f6de22ae00632e86f3"",""ean"":""659842"",""name"":null,""holder"":{""_id"":""5543677f37c6b65f008b46e4"",""name"":""Example account"",""username"":""someone@example.com""},""root"":{""_id"":""5824790e3d214b006271c515"",""holder"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""entity_type"":""utility_provider""}},""assigner"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""username"":""RobHarveyUtilityCompany-utility@example.com"",""manager"":{""_id"":null}},""created"":""2016-11-11T13:26:14+0000"",""children"":[],""address"":""Kungsgatan 2"",""timezone"":""Etc\/GMT-1"",""control_level"":""shared"",""billing_category"":""owned_meter_consumption"",""generation"":1,""tags"":[],""box"":""active"",""revoked"":false,""metrics"":[""energy""],""type"":""heat"",""consumption_stats"":{""energy"":{""hour"":{""count"":26275,""sum"":6546140,""max"":930,""last"":2016123021,""min"":0,""first"":2014010101},""day"":{""count"":1091,""sum"":6522120,""max"":18900,""last"":20161229,""min"":1180,""first"":20140102},""month"":{""count"":33,""sum"":5727310,""max"":387190,""last"":201708,""min"":49750,""first"":201402}}},""cost_stats"":{},""readings_stats"":null,""has_active_complaints"":false,""representation"":null,""open_channel_ids"":null,""on_hold"":null,""last_sla_comment"":null,""location"":null,""meta_data"":{},""meter_readers"":[],""collection_window"":5,""memo"":null},{""_id"":""5825c76920fe9b006308e412"",""ean"":""735999999564879216"",""name"":null,""holder"":{""_id"":""5543677f37c6b65f008b46e4"",""name"":""Example account"",""username"":""someone@example.com""},""root"":{""_id"":""5824790e3d214b006271c510"",""holder"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""entity_type"":""utility_provider""}},""assigner"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""username"":""RobHarveyUtilityCompany-utility@example.com"",""manager"":{""_id"":null}},""created"":""2016-11-11T13:28:09+0000"",""children"":[],""address"":""Kungsgatan 2"",""timezone"":""Etc\/GMT-1"",""control_level"":""shared"",""billing_category"":""owned_meter_consumption"",""generation"":1,""tags"":[],""box"":""active"",""revoked"":false,""metrics"":[""energy""],""type"":""electricity"",""consumption_stats"":{""energy"":{""hour"":{""count"":25953,""sum"":311714.628,""max"":34.3,""last"":2016121709,""min"":0,""first"":2014010101},""day"":{""count"":1080,""sum"":311302.328,""max"":689,""last"":20161216,""min"":141.1,""first"":20140102},""month"":{""count"":35,""sum"":306915.54,""max"":13704.72,""last"":201708,""min"":6013.932,""first"":201402}}},""cost_stats"":{},""readings_stats"":null,""has_active_complaints"":false,""representation"":null,""open_channel_ids"":null,""on_hold"":null,""last_sla_comment"":null,""location"":null,""meta_data"":{},""meter_readers"":[],""collection_window"":5,""memo"":null},{""_id"":""5825c84b22c8aa00623d65a5"",""ean"":""6934363"",""name"":null,""holder"":{""_id"":""5543677f37c6b65f008b46e4"",""name"":""Example account"",""username"":""someone@example.com""},""root"":{""_id"":""577fdd960c8a335c008b4672"",""holder"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""entity_type"":""utility_provider""}},""assigner"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""username"":""RobHarveyUtilityCompany-utility@example.com"",""manager"":{""_id"":null}},""created"":""2016-11-11T13:31:55+0000"",""children"":[],""address"":""Gr\u00e4nsv\u00e4gen 12B"",""timezone"":""Etc\/GMT-1"",""control_level"":""shared"",""billing_category"":""owned_meter_consumption"",""generation"":1,""tags"":[],""box"":""active"",""revoked"":false,""metrics"":[""energy""],""type"":""gas"",""consumption_stats"":{""energy"":{""month"":{""count"":24,""sum"":42656.62,""max"":8890.65,""last"":201708,""min"":104.57,""first"":201501},""hour"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0},""day"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0}}},""cost_stats"":{},""readings_stats"":null,""has_active_complaints"":false,""representation"":null,""open_channel_ids"":null,""on_hold"":null,""last_sla_comment"":null,""location"":null,""meta_data"":{},""meter_readers"":[],""collection_window"":5,""memo"":null},{""_id"":""5825c85320fe9b006308e41d"",""ean"":""5896584"",""name"":null,""holder"":{""_id"":""5543677f37c6b65f008b46e4"",""name"":""Example account"",""username"":""someone@example.com""},""root"":{""_id"":""577fdd960c8a335c008b466c"",""holder"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""entity_type"":""utility_provider""}},""assigner"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""username"":""RobHarveyUtilityCompany-utility@example.com"",""manager"":{""_id"":null}},""created"":""2016-11-11T13:32:03+0000"",""children"":[],""address"":""Gr\u00e4nsv\u00e4gen 12B"",""timezone"":""Etc\/GMT-1"",""control_level"":""shared"",""billing_category"":""owned_meter_consumption"",""generation"":1,""tags"":[],""box"":""active"",""revoked"":false,""metrics"":[""energy""],""type"":""heat"",""consumption_stats"":{""energy"":{""month"":{""count"":57,""sum"":3592320,""max"":173000,""last"":201709,""min"":2000,""first"":201301},""hour"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0},""day"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0}}},""cost_stats"":{},""readings_stats"":null,""has_active_complaints"":false,""representation"":null,""open_channel_ids"":null,""on_hold"":null,""last_sla_comment"":null,""location"":null,""meta_data"":{},""meter_readers"":[],""collection_window"":5,""memo"":null},{""_id"":""5825c85920fe9b0061547253"",""ean"":""735999666123123123"",""name"":null,""holder"":{""_id"":""5543677f37c6b65f008b46e4"",""name"":""Example account"",""username"":""someone@example.com""},""root"":{""_id"":""577fdd960c8a335c008b4669"",""holder"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""entity_type"":""utility_provider""}},""assigner"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""username"":""RobHarveyUtilityCompany-utility@example.com"",""manager"":{""_id"":null}},""created"":""2016-11-11T13:32:09+0000"",""children"":[],""address"":""Gr\u00e4nsv\u00e4gen 12B"",""timezone"":""Etc\/GMT-1"",""control_level"":""shared"",""billing_category"":""owned_meter_consumption"",""generation"":1,""tags"":[],""box"":""active"",""revoked"":false,""metrics"":[""energy""],""type"":""electricity"",""consumption_stats"":{""energy"":{""month"":{""count"":45,""sum"":141604.36,""max"":6488.2,""last"":201709,""min"":1759.64,""first"":201401},""hour"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0},""day"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0}}},""cost_stats"":{},""readings_stats"":null,""has_active_complaints"":false,""representation"":null,""open_channel_ids"":null,""on_hold"":null,""last_sla_comment"":null,""location"":null,""meta_data"":{},""meter_readers"":[],""collection_window"":5,""memo"":null},{""_id"":""5825c85d22c8aa00606b9dd5"",""ean"":""1200004"",""name"":null,""holder"":{""_id"":""5543677f37c6b65f008b46e4"",""name"":""Example account"",""username"":""someone@example.com""},""root"":{""_id"":""577fdd960c8a335c008b466f"",""holder"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""entity_type"":""utility_provider""}},""assigner"":{""_id"":""577fd0170c8a335c008b45fe"",""name"":""Rob Harvey Utility Company"",""username"":""RobHarveyUtilityCompany-utility@example.com"",""manager"":{""_id"":null}},""created"":""2016-11-11T13:32:13+0000"",""children"":[],""address"":""Gr\u00e4nsv\u00e4gen 12B"",""timezone"":""Etc\/GMT-1"",""control_level"":""shared"",""billing_category"":""owned_meter_consumption"",""generation"":1,""tags"":[],""box"":""active"",""revoked"":false,""metrics"":[""energy""],""type"":""cooling"",""consumption_stats"":{""energy"":{""month"":{""count"":33,""sum"":902350,""max"":92560,""last"":201709,""min"":9730,""first"":201501},""hour"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0},""day"":{""first"":null,""last"":null,""sum"":null,""max"":null,""min"":null,""count"":0}}},""cost_stats"":{},""readings_stats"":null,""has_active_complaints"":false,""representation"":null,""open_channel_ids"":null,""on_hold"":null,""last_sla_comment"":null,""location"":null,""meta_data"":{},""meter_readers"":[],""collection_window"":5,""memo"":null}]}";

        var items = JsonConvert.DeserializeObject<List<ModelsClass.Rootobject>>(json2);
         foreach (ModelsClass.Rootobject value in items)
         {
             Console.WriteLine(value, items);
         }
        Console.ReadKey();
    }
}

那么,任何人都可以帮助我了解如何将所有键值对从我的模型类返回到命令行吗?

如您所见,JSON 响应非常复杂,包含混合对象和数组。

最佳答案

您的 json 在语法上不正确 ( https://jsonlint.com/ ),据我所知,它不包含 ModelClass.Rootobject 的列表,而只包含此类的对象。 尝试以下操作

    static void Main()
{
    string json2 = @"{'code':200,'message':'OK','profiling':null,'count':6,'skip':0,'limit':50,'next_page':null,'previous_page':null,'additional_meta':{'$and':[{'deleted':false},{'$or':[{'holder_id':{'$id':'5543677f37c6b65f008b46e4'}},{'root.holder._id':{'$id':'5543677f37c6b65f008b46e4'}}]}]},'data':[{'_id':'5825c6f6de22ae00632e86f3','ean':'659842','name':null,'holder':{'_id':'5543677f37c6b65f008b46e4','name':'Example account','username':'someone@example.com'},'root':{'_id':'5824790e3d214b006271c515','holder':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','entity_type':'utility_provider'}},'assigner':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','username':'RobHarveyUtilityCompany-utility@example.com','manager':{'_id':null}},'created':'2016-11-11T13:26:14+0000','children':[],'address':'Kungsgatan 2','timezone':'Etc\/GMT-1','control_level':'shared','billing_category':'owned_meter_consumption','generation':1,'tags':[],'box':'active','revoked':false,'metrics':['energy'],'type':'heat','consumption_stats':{'energy':{'hour':{'count':26275,'sum':6546140,'max':930,'last':2016123021,'min':0,'first':2014010101},'day':{'count':1091,'sum':6522120,'max':18900,'last':20161229,'min':1180,'first':20140102},'month':{'count':33,'sum':5727310,'max':387190,'last':201708,'min':49750,'first':201402}}},'cost_stats':{},'readings_stats':null,'has_active_complaints':false,'representation':null,'open_channel_ids':null,'on_hold':null,'last_sla_comment':null,'location':null,'meta_data':{},'meter_readers':[],'collection_window':5,'memo':null},{'_id':'5825c76920fe9b006308e412','ean':'735999999564879216','name':null,'holder':{'_id':'5543677f37c6b65f008b46e4','name':'Example account','username':'someone@example.com'},'root':{'_id':'5824790e3d214b006271c510','holder':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','entity_type':'utility_provider'}},'assigner':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','username':'RobHarveyUtilityCompany-utility@example.com','manager':{'_id':null}},'created':'2016-11-11T13:28:09+0000','children':[],'address':'Kungsgatan 2','timezone':'Etc\/GMT-1','control_level':'shared','billing_category':'owned_meter_consumption','generation':1,'tags':[],'box':'active','revoked':false,'metrics':['energy'],'type':'electricity','consumption_stats':{'energy':{'hour':{'count':25953,'sum':311714.628,'max':34.3,'last':2016121709,'min':0,'first':2014010101},'day':{'count':1080,'sum':311302.328,'max':689,'last':20161216,'min':141.1,'first':20140102},'month':{'count':35,'sum':306915.54,'max':13704.72,'last':201708,'min':6013.932,'first':201402}}},'cost_stats':{},'readings_stats':null,'has_active_complaints':false,'representation':null,'open_channel_ids':null,'on_hold':null,'last_sla_comment':null,'location':null,'meta_data':{},'meter_readers':[],'collection_window':5,'memo':null},{'_id':'5825c84b22c8aa00623d65a5','ean':'6934363','name':null,'holder':{'_id':'5543677f37c6b65f008b46e4','name':'Example account','username':'someone@example.com'},'root':{'_id':'577fdd960c8a335c008b4672','holder':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','entity_type':'utility_provider'}},'assigner':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','username':'RobHarveyUtilityCompany-utility@example.com','manager':{'_id':null}},'created':'2016-11-11T13:31:55+0000','children':[],'address':'Gr\u00e4nsv\u00e4gen 12B','timezone':'Etc\/GMT-1','control_level':'shared','billing_category':'owned_meter_consumption','generation':1,'tags':[],'box':'active','revoked':false,'metrics':['energy'],'type':'gas','consumption_stats':{'energy':{'month':{'count':24,'sum':42656.62,'max':8890.65,'last':201708,'min':104.57,'first':201501},'hour':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0},'day':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0}}},'cost_stats':{},'readings_stats':null,'has_active_complaints':false,'representation':null,'open_channel_ids':null,'on_hold':null,'last_sla_comment':null,'location':null,'meta_data':{},'meter_readers':[],'collection_window':5,'memo':null},{'_id':'5825c85320fe9b006308e41d','ean':'5896584','name':null,'holder':{'_id':'5543677f37c6b65f008b46e4','name':'Example account','username':'someone@example.com'},'root':{'_id':'577fdd960c8a335c008b466c','holder':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','entity_type':'utility_provider'}},'assigner':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','username':'RobHarveyUtilityCompany-utility@example.com','manager':{'_id':null}},'created':'2016-11-11T13:32:03+0000','children':[],'address':'Gr\u00e4nsv\u00e4gen 12B','timezone':'Etc\/GMT-1','control_level':'shared','billing_category':'owned_meter_consumption','generation':1,'tags':[],'box':'active','revoked':false,'metrics':['energy'],'type':'heat','consumption_stats':{'energy':{'month':{'count':57,'sum':3592320,'max':173000,'last':201709,'min':2000,'first':201301},'hour':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0},'day':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0}}},'cost_stats':{},'readings_stats':null,'has_active_complaints':false,'representation':null,'open_channel_ids':null,'on_hold':null,'last_sla_comment':null,'location':null,'meta_data':{},'meter_readers':[],'collection_window':5,'memo':null},{'_id':'5825c85920fe9b0061547253','ean':'735999666123123123','name':null,'holder':{'_id':'5543677f37c6b65f008b46e4','name':'Example account','username':'someone@example.com'},'root':{'_id':'577fdd960c8a335c008b4669','holder':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','entity_type':'utility_provider'}},'assigner':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','username':'RobHarveyUtilityCompany-utility@example.com','manager':{'_id':null}},'created':'2016-11-11T13:32:09+0000','children':[],'address':'Gr\u00e4nsv\u00e4gen 12B','timezone':'Etc\/GMT-1','control_level':'shared','billing_category':'owned_meter_consumption','generation':1,'tags':[],'box':'active','revoked':false,'metrics':['energy'],'type':'electricity','consumption_stats':{'energy':{'month':{'count':45,'sum':141604.36,'max':6488.2,'last':201709,'min':1759.64,'first':201401},'hour':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0},'day':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0}}},'cost_stats':{},'readings_stats':null,'has_active_complaints':false,'representation':null,'open_channel_ids':null,'on_hold':null,'last_sla_comment':null,'location':null,'meta_data':{},'meter_readers':[],'collection_window':5,'memo':null},{'_id':'5825c85d22c8aa00606b9dd5','ean':'1200004','name':null,'holder':{'_id':'5543677f37c6b65f008b46e4','name':'Example account','username':'someone@example.com'},'root':{'_id':'577fdd960c8a335c008b466f','holder':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','entity_type':'utility_provider'}},'assigner':{'_id':'577fd0170c8a335c008b45fe','name':'Rob Harvey Utility Company','username':'RobHarveyUtilityCompany-utility@example.com','manager':{'_id':null}},'created':'2016-11-11T13:32:13+0000','children':[],'address':'Gr\u00e4nsv\u00e4gen 12B','timezone':'Etc\/GMT-1','control_level':'shared','billing_category':'owned_meter_consumption','generation':1,'tags':[],'box':'active','revoked':false,'metrics':['energy'],'type':'cooling','consumption_stats':{'energy':{'month':{'count':33,'sum':902350,'max':92560,'last':201709,'min':9730,'first':201501},'hour':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0},'day':{'first':null,'last':null,'sum':null,'max':null,'min':null,'count':0}}},'cost_stats':{},'readings_stats':null,'has_active_complaints':false,'representation':null,'open_channel_ids':null,'on_hold':null,'last_sla_comment':null,'location':null,'meta_data':{},'meter_readers':[],'collection_window':5,'memo':null}]}";

    var items = JsonConvert.DeserializeObject<ModelsClass.Rootobject>(json2);
     foreach (ModelsClass.Rootobject value in items)
     {
         Console.WriteLine(value, items);
     }
    Console.ReadKey();
}

关于c# - 将复杂(嵌套)JSON 反序列化为 C# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640614/

相关文章:

java - IllegalArgumentException:2020 年 1 月安全路径中的无效列 null

java - 根据另一个数组中的特定条件将数组中的特定值相乘并将值存储在新数组中?

c# - 如何知道在C#代码中具有TRY CATCH处理的存储过程中是否存在错误

c# - 受限类型的通用集合

c# - 如何在 C# 中获取两个字符串数组之间的差异?

c# - 如何从 C++ dll 中删除 C# dll

c# - 关于创建委托(delegate)对象 - C#

c# - 所有任务完成后继续任务

c# - MVC 4 样式捆绑 - 如何添加浏览器特定的样式表

sql - 在 PostgreSQL 上以正确的顺序对数组元素进行分组