我想生成一个json字符串但是 我做了什么是错的?为什么这个代码会抛出一个未处理的异常
Public Function GenerateJsonString(doer As Integer, comment As String, id As Integer) As String
Dim jsonString As String = String.Format("{done_by:{0}, comment:{1}, request_id:{2}}", doer, comment, id)
Return jsonString
End Function
mscorlib.dll中发生未处理的“System.FormatException”类型异常
其他信息:输入字符串的格式不正确。
答案 0 :(得分:2)
括号{是string.format中的特殊字符,因此如果你想在输出中使用它们,你需要使用两个括号:
Dim jsonString As String = String.Format("{{done_by:{0}, comment:{1}, request_id:{2}}}", 806, "comment", 16233)
输出
{done_by:806, comment:comment, request_id:16233}
哪个是无效的json,因为它缺少“-characters。所以要纠正你可以做的
Dim jsonString As String = String.Format("{{""done_by"":{0}, ""comment"":""{1}"", ""request_id"":{2}}}", 806, "comment", 16233)
请注意,comment是字符串,还需要“-characters in value。”
输出正确json:
{"done_by":806, "comment":"comment", "request_id":16233}
通过序列化还有更简单,更健壮的方法:
Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer
Dim jsonString As String = serializer.Serialize(New With {.done_by = 806, .comment = "comment", .request_id = 16233})
如果你有类库或windows -project,它需要System.Web.Extensions引用你的项目。
祝你好运!答案 1 :(得分:1)
问题在于你的文字文本中有大括号。当调用String.Format
时,大括号用于表示占位符,但是在文本的开头有一个左括号,在结尾有一个右大括号。如果你想要包含那些文字括号,你必须逃避它们,即
"{{done_by:{0}, comment:{1}, request_id:{2}}}"