2017-03-17 49 views
0

尝试读取下面的JSON价值。我得到意想不到的语法错误是响应我调用外部API意外的解析错误JSON C#

"{ 
status: 201, 
data: { 
    booking_id: B2B-E51771039A176C, 
    booking_amount: 5398.00, 
    room_charges: 5398.00, 
    meal_charges: 0.00, 
    inclusion_charges: 600.00, 
    taxes: 1133.58, 
    status: Initiated 
} 
}" 

后得到我想从该booking_id上面的json在一个字符串中。

下面是我在网上产生

public class Data 
    { 
     [JsonProperty("booking_id")] 
     public string booking_id { get; set; } 
     [JsonProperty("booking_amount")] 
     public string booking_amount { get; set; } 
     [JsonProperty("room_charges")] 
     public string room_charges { get; set; } 
     [JsonProperty("meal_charges")] 
     public string meal_charges { get; set; } 
     [JsonProperty("inclusion_charges")] 
     public string inclusion_charges { get; set; } 
     [JsonProperty("taxes")] 
     public string taxes { get; set; } 
     [JsonProperty("status")] 
     public string status { get; set; } 
    } 

    public class RootObject 
    { 

     public int status { get; set; } 

     public Data data { get; set; } 
    } 

模型这是我用来转换

RootObject rootobj=JsonConvert.DeserializeObject<RootObject>(JsonReplace); 
+1

如何你解析这个? –

+0

你还可以分享你用于反序列化的模型吗? – mindOfAi

+0

请编辑您的问题以显示您用于解析的代码以及错误消息。 –

回答

1

这不是有效的JSON,因为在JSON中,字符串值需要用引号引起来,否则将被视为数字。在反序列化过程中,反序列化器会尝试将数值视为数字,并且会失败。

这是有效的JSON:

{ 
    status: 201, 
    data: { 
      booking_id: "B2B-E51771039A176C", 
      booking_amount: 5398.00, 
      room_charges: 5398.00, 
      meal_charges: 0.00, 
      inclusion_charges: 600.00, 
      taxes: 1133.58, 
      status:"Initiated" 
    } 
} 

通知各地booking_idstatus报价。

这有效的JSON都会有这样一类:

public class Data 
{ 
    public string booking_id { get; set; } 
    public double booking_amount { get; set; } 
    public double room_charges { get; set; } 
    public double meal_charges { get; set; } 
    public double inclusion_charges { get; set; } 
    public double taxes { get; set; } 
    public string status { get; set; } 
} 

public class RootObject 
{ 
    public int status { get; set; } 
    public Data data { get; set; } 
} 

得到这样的价值:

RootObject obj = JsonConvert.DeserializeObject<RootObject>(json); 
var id = obj.data.booking_id; 
1

你JSON是无效的。 您的booking_id值应该包含双引号和状态文本中的字符串。

{ 
status: 201, 
data: { 
    booking_id: "B2B-E51771039A176C", 
    booking_amount: 5398.00, 
    room_charges: 5398.00, 
    meal_charges: 0.00, 
    inclusion_charges: 600.00, 
    taxes: 1133.58, 
    status: "Initiated" 
} 
} 
1

在我看来,它是无效的,我认为这是因为booking_idstatus的。 booking_idstatus的数据属性不是字符串,所以我认为这是问题所在。你应该通过它作为字符串(带引号):

"{ 
status: 201, 
data: { 
    booking_id: "B2B-E51771039A176C", 
    booking_amount: 5398.00, 
    room_charges: 5398.00, 
    meal_charges: 0.00, 
    inclusion_charges: 600.00, 
    taxes: 1133.58, 
    status: "Initiated" 
} 
}" 

希望它有帮助!

+0

是的,我得到的回应是无效的,必须联系api提供商以正确的json格式给出有效的回复。感谢:) – Melvin

+0

对你有好处。祝你的发展顺利! :) – mindOfAi