首页 > 解决方案 > 如何序列化具有自定义 IComparer 的 SortedDictionaty

问题描述

目标很简单。按 DESC 键使字典序列化顺序。

[HttpGet]
[Route("")]
public IActionResult Test()
{
    var dic = new SortedDictionary<int, string>(new DescComparer<int>())
        {{1, "A"}, {3, "C"}, {4, "D"}, {2, "B"}};
    return Ok(dic);
}

class DescComparer<T> : IComparer<T>
{
    private readonly IComparer<T> _defaultComparer = Comparer<T>.Default;
    public int Compare([AllowNull] T x, [AllowNull] T y)
    {
        return _defaultComparer.Compare(y, x);
    }
}

结果是:

{
    "1":"A",
    "2":"B",
    "3":"C",
    "4":"D"
}

我想要的是:

{
    "4":"D",
    "3":"C",
    "2":"B",
    "1":"A"
}

有人能帮我吗?

标签: c#jsonasp.net-core

解决方案


尝试这个:

class DescComparer<T> : IComparer<T> where T : IComparable<T>
{
    //private readonly IComparer<T> _defaultComparer = Comparer<T>.Default;
    public int Compare(T x, T y)
    {
        return y.CompareTo(x);
    }
}

结果: 在此处输入图像描述


推荐阅读