考虑Node
类。使用Newtonsoft将其转换为JSON。
class Node {
IList<Node> Nodes { get; }
}
我目前正在将默认排序逻辑实现为 -
class Node : IComparable<Node> {
IList<Node> Nodes { get; }
public int CompareTo(Node node) {
// some default sorting logic
}
}
Newtonsoft,在使用它进行序列化时,给JSON提供了以相同逻辑排序的节点。
string jsonString = JsonConvert.SerializeObject(
deserializedObject,
Formatting.None,
new JsonSerializerSettings
{
// some settings
});
问题:现在,我想将IComparer
传递给JsonConvert.SerializeObject()
方法,以便JSON在新的排序逻辑中具有Nodes集合。
在某种程度上,我想让调用者自由地按照他们的方式对集合进行排序,而不是默认的集合,否则将使用它。
不知道是否有一种简单的方法可以做到这一点?有什么建议吗?
答案 0 :(得分:2)
无法将IComparer传递给JsonConvert.SerializeObject()。您可以使用自定义排序(IComparer)逻辑对对象列表进行排序,并将列表传递给序列化。
但是,正如您所说,您可以将IComparer传递给Custom方法并完成任务。如下,
class Node
{
IList<Node> Nodes { get; set; }
internal string Serialize(IComparer<Node> comparer)
{
Nodes = (IList<Node>)Nodes.OrderBy(c => c, comparer);
return JsonConvert.SerializeObject(Nodes, Formatting.Indented, new JsonSerializerSettings() { });
}
}
class SortHelper : IComparer<Node>
{
int IComparer<Node>.Compare(Node x, Node y)
{
// compare object x and y by custom logic
return 0;
}
}
并使用上述自定义IComparer
调用以下方法string jsonString = node.Serialize(new SortHelper());