.net 如何在JSON字符串反序列化期间忽略数组项
看起来很简单,但我就是不知道怎么做。我使用外部api获取JSON结果(使用Newtonsoft.JSON),问题是设计不好,导致我的数组类型混合如下:.net 如何在JSON字符串反序列化期间忽略数组项,.net,json,json.net,.net,Json,Json.net,看起来很简单,但我就是不知道怎么做。我使用外部api获取JSON结果(使用Newtonsoft.JSON),问题是设计不好,导致我的数组类型混合如下: {"data":["Monday 13 january", {"id":"1234aa","name":"teamA"},{"id":"1234bb","name":"teamB"}, "Tuesday 14 january", {"id":"1234aa","name":"teamA"}]} public class RootObject {
{"data":["Monday 13 january", {"id":"1234aa","name":"teamA"},{"id":"1234bb","name":"teamB"}, "Tuesday 14 january", {"id":"1234aa","name":"teamA"}]}
public class RootObject
{
[JsonProperty("data")]
[JsonConverter(typeof(TeamListConverter))]
public List<Team> Teams { get; set; }
}
public class Team
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
这将产生如下对象:
public class RootObject
{
public List<object> data { get; set; }
}
公共类根对象
{
公共列表数据{get;set;}
}
我希望忽略这些日期字符串,并将对象反序列化为类型化数组
public class RootObject
{
public List<Team> data { get; set; }
}
公共类根对象
{
公共列表数据{get;set;}
}
你知道如何实现这种行为吗
更新:
也许我不清楚,但我不是在寻找一个在反序列化之后进行soms转换的解决方案。我想要一些集成的解决方案,例如使用JsonConverter。当序列化对象时,如果愿意,可以配置忽略哪个属性。如果您这样做了,那么您必须迭代列表
列表数据
,找到团队
对象并将它们放在单独的列表中。这可以通过自定义JsonConverter
实现
假设您的类设置如下:
{"data":["Monday 13 january", {"id":"1234aa","name":"teamA"},{"id":"1234bb","name":"teamB"}, "Tuesday 14 january", {"id":"1234aa","name":"teamA"}]}
public class RootObject
{
[JsonProperty("data")]
[JsonConverter(typeof(TeamListConverter))]
public List<Team> Teams { get; set; }
}
public class Team
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
以下是演示程序:
public class Program
{
public static void Main(string[] args)
{
string json = @"
{
""data"":
[
""Monday 13 january"",
{
""id"":""1234aa"",
""name"":""teamA""
},
{
""id"":""1234bb"",
""name"":""teamB""
},
""Tuesday 14 january"",
{
""id"":""1234aa"",
""name"":""teamA""
}
]
}";
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
foreach (Team t in obj.Teams)
{
Console.WriteLine(t.Id + " - " + t.Name);
}
}
}
这就是您要找的吗?我不明白,我的问题不是关于属性,而是关于忽略数组项。请添加一些示例代码,看看您的解决方案是否有帮助。这正是我想要的,谢谢!昨天晚上我就想出来了,但我用了两个转换器。你的看起来更好更干净。我今晚给它一个机会,如果它有效的话,我会做标记。谢谢