【问题标题】:C# Json: Sort alphanumeric stringC# Json:对字母数字字符串进行排序
【发布时间】:2021-09-17 07:26:58
【问题描述】:

我正在尝试通过删除第一个字符“A”来对 fieldName 进行排序,但仍然无法正确排序。

static void Main(string[] args)
{
    string _json = "{'Information': [{'FieldName': 'A104','Draft': 'Unknown'},{'FieldName': 'A02','Draft': 'Unknown'},{'FieldName': 'A101','Draft': 'Unknown'},{'FieldName': 'A03','Draft': 'Unknown'}],'OtherInfo': []}";
    var jObj = JsonConvert.DeserializeObject<Informat>(_json);
    var test1 = jObj.Information.OrderByDescending(x => x.FieldName.Remove(0,1));
    var sortedJson = JsonConvert.SerializeObject(test1);
    jObj.PMRejectedReasons = sortedPMRejectedReasonsJson.ToArray();

    //below too not working
    var sortedRMASystemReasonsJson =
        from t in jObj.Information
        orderby t.FieldName.Remove(0,1) descending
        select t;
}

JSON:

{
   "Information":[
      {
         "FieldName":"A104",
         "Draft":"Unknown"
      },
      {
         "FieldName":"A02",
         "Draft":"Unknown"
      },
      {
         "FieldName":"A101",
         "Draft":"Unknown"
      },
      {
         "FieldName":"A03",
         "Draft":"Unknown"
      }
   ],
   "OtherInfo":[
      
   ]
}

【问题讨论】:

  • “仍然没有正确排序” - 这是什么意思?目前会发生什么,您期望会发生什么?请提供预期输出的示例

标签: c# json sorting


【解决方案1】:

您可能期望的是数字顺序。即使在删除“A”之后,剩余的字符串也将按词法顺序排序。即,首先是所有以0 开头的数字,然后是1 等,无论它们有多少个数字。

您必须将数字转换为数值(例如intlongdecimal)才能获得数字顺序。

var test1 = jObj.Information
    .OrderByDescending(x => Int64.Parse(x.FieldName.Remove(0,1)));

var sortedRMASystemReasonsJson =
   from t in jObj.Information
   orderby Int64.Parse(t.FieldName.Remove(0,1)) descending
   select t;

如果您在 .NET Core 项目中使用 C# 8.0 或更高版本,也可以使用 t.FieldName[1..] 代替 t.FieldName.Remove(0,1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2018-04-21
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多