c# - 将 CSV 字符串反序列化为 C# 对象

标签 c# .net deserialization jira

我收到来自 Jira API 的响应,需要反序列化为数据模型:

com.atlassian.greenhopper.service.sprint.Sprint@40675167[id=10151,rapidViewId=171,state=CLOSED,name=Sprint 37.1,startDate=2015-07-30T16:00:22.000+03:00,endDate=2015-08-13T16:00:00.000+03:00,completeDate=2015-08-13T14:31:34.343+03:00,sequence=10151]

这实际上是当前 sprint 的问题信息。 我需要将其反序列化为如下模型:

public class Model
{
    public string name { get; set; }
    ...
}

我已经使用正则表达式模式\[(.*?)\]删除了所有非必需信息,例如com.atlassian.greenhopper.service.sprint.Sprint@40675167 所以我有括号和所有内容。

现在我完全停止尝试寻找将此字符串转换为数据模型的方法。

最佳答案

发现以下内容thread在 Atlassian Answers 页面上,似乎没有该内部对象的 JSON 表示形式。如该线程的示例所示:

customfield_10007:[
"com.atlassian.greenhopper.service.sprint.Sprint@a29f07[rapidViewId=<null>,state=CLOSED,name=NORD - Sprint 42,startDate=2013-07-29T06:47:00.000+02:00,endDate=2013-08-11T20:47:00.000+02:00,completeDate=2013-08-14T15:31:33.157+02:00,id=107]",
"com.atlassian.greenhopper.service.sprint.Sprint@769133[rapidViewId=<null>,state=ACTIVE,name=NORD - Sprint 43,startDate=2013-08-14T15:32:47.322+02:00,endDate=2013-08-23T15:32:47.322+02:00,completeDate=<null>,id=117]"
],

响应确实是一个 JSON 数组,但数组本身包含 CSV,因此您可以使用以下内容来解析它:

   public class DataObject
    {
        public string id { get; set; }
        public string rapidViewId { get; set; }
        public string state { get; set; } 
        public string name { get; set; }
        public string startDate { get; set; }
        public string endDate { get; set; }
        public string completeDate { get; set; }
        public string sequence { get; set; }
    }


    public class Program
    {
        private const string sampleStringData =
            @"[id=10151,rapidViewId=171,state=CLOSED,name=Sprint 37.1,startDate=2015-07-30T16:00:22.000+03:00,endDate=2015-08-13T16:00:00.000+03:00,completeDate=2015-08-13T14:31:34.343+03:00,sequence=10151]";


        static void Main(string[] args)
        {
            var dataObject = new DataObject();

            string[][] splitted;
            var sampleWithNoBrackets = sampleStringData.Substring(1,sampleStringData.Length-2);
            splitted = sampleWithNoBrackets.Split(',').Select(p => p.Split('=')).ToArray();

            dataObject.id           = splitted[0][1];
            dataObject.rapidViewId  = splitted[1][1];
            dataObject.state        = splitted[2][1];
            dataObject.name         = splitted[3][1];
            dataObject.startDate    = splitted[4][1];
            dataObject.endDate      = splitted[5][1];
            dataObject.completeDate = splitted[6][1];
            dataObject.sequence     = splitted[7][1];

            Console.ReadKey();
        }
    }

这是上面的输出:

enter image description here

关于c# - 将 CSV 字符串反序列化为 C# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32524313/

相关文章:

c# - 通过单击按钮使用带参数的存储过程在 asp.net winform 中填充 ListView

c# - 正则表达式 - 通过注意缺少字符串然后插入它来匹配多行 block

.net - 在 .NET 中进行保持事件套接字检查的最佳方法是什么?

c# - NSubstitute -3.x 'ValueType' 在未被引用的程序集中定义。您必须添加对程序集“netstandard”的引用,

c# - 带数字的 JSON.NET 字段名称?

c# - 为 LINQ/Lambda 创建 OrderBy 表达式

c# - 如何在派生类时更改常量或静态变量的值?

C#: for 诗句 foreach

java - 包含 Map<String, Object> 字段的对象的 Jackson 默认类型

C++ Boost 反序列化 what() : input stream error