c# - C# Json:对字母数字字符串进行排序
问题描述
我试图通过删除第一个字符'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":[
]
}
解决方案
可能您期望的是数字顺序。即使在删除“A”之后,剩余的字符串也将按词法顺序排序。0
即,首先出现所有以then开头的数字1
,等等,无论它们有多少位数。
您必须将数字转换为数值(例如int
、long
、decimal
)才能获得数字顺序。
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)
.
推荐阅读
- twig - 如何在没有视图的情况下在 Twig Drupal 8 中显示列表内容
- c++ - 在 C++ 中重载显式构造函数
- github-desktop - 使用芬兰语/瑞典语键盘布局在 GitHub Desktop 中“在 Git Bash 中打开”的键盘快捷键
- javascript - 以角度在框中拖动和上传多个图像
- reactjs - 具有高阶组件的通用组件
- angular - 无法禁用角度 cli 警告
- python-3.x - Python 3 Web Scrape & Beautiful Soup - 隐藏信息
- visual-studio - 在 TFS 构建定义中未触发 Visual Studio 项目的构建后事件
- javascript - Tesseract.js 挂在控制台中
- git - 如何在 android studio 版本控制中找到 Git?