VB.NET String.Format FormatException未处理

时间:2016-07-01 06:37:39

标签: vb.net

我想生成一个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”类型异常

其他信息:输入字符串的格式不正确。

2 个答案:

答案 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}}}"