Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JavaScriptSerializer.deserialize以逗号分隔的json字符串以列出<;字符串>;_C#_.net_Json - Fatal编程技术网

C# JavaScriptSerializer.deserialize以逗号分隔的json字符串以列出<;字符串>;

C# JavaScriptSerializer.deserialize以逗号分隔的json字符串以列出<;字符串>;,c#,.net,json,C#,.net,Json,我有下列类型 class ToDoElement{ public int id; public string title; public string description; public List<string> tags; } 当我试图通过JavaScriptSerializer解析它时: System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script

我有下列类型

class ToDoElement{


 public int id;
    public string title;
    public string description;
    public List<string> tags;
}
当我试图通过JavaScriptSerializer解析它时:

System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer ();
ToDoElement o = js.Deserialize<ToDoElement> (msg);
System.Web.Script.Serialization.JavaScriptSerializer js=new System.Web.Script.Serialization.JavaScriptSerializer();
ToDoElement o=js.Deserialize(msg);
我有个例外

“无法将字符串转换为列表”


我做错了什么?

标记
只是一个字符串,里面有逗号分隔的单词:

 "tags": "tag1, tag2, tag3"
您需要反序列化到以下字段:

 public string tags;
以后,你可以和和分开

如果仍然希望类中显示标记列表,可以将
“tags”
属性反序列化为代理属性,如下所示:

class ToDoElement
{
    public int id;
    public string title;
    public string description;
    public string tags
    {
        get
        {
            if (TagList == null)
                return null;
            return string.Join(", ", TagList.ToArray());
        }
        set
        {
            if (value == null)
            {
                TagList = null;
                return;
            }
            TagList = value.Split(',').Select(s => s.Trim()).ToList();
        }
    }
    [ScriptIgnore]
    public List<string> TagList { get; set; }
}
类ToDoElement
{
公共int id;
公共字符串标题;
公共字符串描述;
公共字符串标记
{
得到
{
如果(标记列表==null)
返回null;
返回字符串.Join(“,”,TagList.ToArray());
}
设置
{
如果(值==null)
{
标记列表=空;
返回;
}
TagList=value.Split(',')。选择(s=>s.Trim()).ToList();
}
}
[脚本忽略]
公共列表标记列表{get;set;}
}
这是:

"tags": "tag1, tag2, tag3"
不是正确的JSON数组,它应该如下所示:

"tags: ["tag1", "tag2", "tag3"]
如果无法更改JSON,则需要将其解析为中间对象。我将在这个示例中使用Json.NET:

dynamic intermediateObj = JsonConvert.DeserializeObject<dynamic>(msg); 
ToDoElement = new ToDoElement 
{
    Title = intermediateObj.title,
    Description = intermediateObj.description,
    Tags = intermediateObj.tags.Split(',').Select(str => str.Trim())
                                          .ToList();
}
动态中介bj=JsonConvert.DeserializeObject(msg); ToDoElement=新的ToDoElement { Title=intermediateObj.Title, Description=intermediateObj.Description, Tags=intermediateObj.Tags.Split(',')。选择(str=>str.Trim()) .ToList(); } 注意,我还添加了
字符串.Trim
调用。如果不需要,可以将其删除

dynamic intermediateObj = JsonConvert.DeserializeObject<dynamic>(msg); 
ToDoElement = new ToDoElement 
{
    Title = intermediateObj.title,
    Description = intermediateObj.description,
    Tags = intermediateObj.tags.Split(',').Select(str => str.Trim())
                                          .ToList();
}