2017-03-06 172 views
0

定义我有一个表示开始和结束时间,而我试图在C#中反序列化,以制定出入库时间JSON字符串。C#jSON.net - 无法解析反序列化的字符串 - 字符串不包含X

JSON字符串被构建为如下:

private string getTimes(int user) 
{ 
    string jSON = ""; 
    string x = """; 
    switch(user) 
    { 
     case 1: 
      jSON = "{'startTime':08:00,'endTime':'16:00'}".Replace("'",x); 
      break; 
     case 2: 
      jSON = "{'startTime':09:00,'endTime':'17:00'}".Replace("'", x); 
      break; 
     case 3: 
      jSON = "{'startTime':12:00,'endTime':'20:00'}".Replace("'", x); ; 
     break; 
    } 
    jSON = JsonConvert.SerializeObject(jSON); 
    return jSON; 
} 

,它返回一个字符串(在Context.Response.Write检查此)像:

"{"startTime":12:00,"endTime":20:00}" 

当我打电话经由选择的下拉列表提供getTimesint user值),我得到一个错误:“‘串’不包含‘开始时间’的定义。”

我的代码调用getTimes是:

int user = int.Parse(ddlUser.SelectedValue); 
    string timesInJSON = getTimes(user); 

    var results = JsonConvert.DeserializeObject<dynamic>(timesInJSON); 
    DateTime dtStart = Convert.ToDateTime(results.startTime); 
    DateTime dtEnd = Convert.ToDateTime(results.endTime); 

我很困惑,我认为应该反序列化JSON和给我正确的结果呢?我错过了什么/做错了什么?

+2

你错过了行情的开始时间值 –

+0

这是'Timespan'而不是'DateTime' 。你为什么手动创建json?为什么你试图将'JineObject'变成'dynamic'而不是'flat model? –

回答

2

似乎你试图序列串? 您序列化对象以获取字符串。

private string getTimes(int user) 
{ 
    string jSON = ""; 
    string x = "&quot;"; 
    switch(user) 
    { 
     case 1: 
      jSON = "{'startTime':08:00,'endTime':'16:00'}".Replace("'",x); 
      break; 
     case 2: 
      jSON = "{'startTime':09:00,'endTime':'17:00'}".Replace("'", x); 
      break; 
     case 3: 
      jSON = "{'startTime':12:00,'endTime':'20:00'}".Replace("'", x); ; 
     break; 
    } 
    //jSON = JsonConvert.SerializeObject(jSON); 
    return jSON; //<-- already serialised 
} 

典型用法(时间跨度可能是挣点您的具体情况虽然不是DateTime是否)...

var foo = { starttime = Datetime.UtcNow, endTime = DateTime.UtcNow.AddHours(1) }; 
var json = JsonConvert.SerializeObject(foo); 
var bar = JsonConvert.DeSerializeObject(json); 
+0

我想你还需要删除在那里转义的可怕的html实体。正如引用被替换为'"'那样,我认为它不会是有效的json。 – Chris

+0

谢谢。所以,是的这是这一点,缺少围绕startTime值的报价,并且也用于替换“与‘我需要让XA焦炭,使.replace'.Replace(’””,x.ToString())' - 这克里斯刚刚上面提到的:)我也确实需要时间不是时间跨度 – Dave

+1

@戴夫。(虽然我需要的时间跨度也别处):不要构建您的JSON手动在所有使用战争提出在结束的方法。构造一个对象,然后连载了。你有一个JSON库,利用它! – Chris

相关问题