2013-07-31 66 views
3

我得到System.FormatException:運行此方法時,輸入字符串的格式不正確。System.FormatException字符串

字段的值:

arrayName = "requester"; 
fieldList = "\"name\" : \"shimshon\""; // "name" : "shimshon" 


public override string ToString() 
{ 
    var val = string.Format("\"{0}\" : { {1} }", arrayName, fieldList); 

    return val; 
} 

的期望該方法的結果是

"requester" : { "name" : "shimshon" } 

有什麼不對這種格式?

+0

儘管這與手頭上的問題無關,但從一般觀察來看,您似乎正試圖創建某種JSON對象。我會建議創建一個具有所需屬性的類,並使用某種庫(如JSON.net)將其序列化爲JSON字符串,它將保存。如果這不是您正在嘗試做的事情,那麼請忽略此評論。 – Bearcat9425

回答

7

我想你想:

var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList); 

注意一倍{{}}這是必要的字面上得到支撐到輸出轉義序列。

0

您必須轉義{}字符,這些字符不是格式的一部分。

string.Format("\"{0}\" : {{ {1} }}",.....) 

看到這個MSDN頁:

http://msdn.microsoft.com/en-us/library/txafckwd.aspx

打開和關閉括號被解釋爲開始和結束 格式項。因此,您必須使用轉義序列來顯示 文字左右大括號或右大括號。在固定文本中指定兩個開放大括號 (「{{」)以顯示一個大括號(「{」)或兩個 大括號(「}}」)以顯示一個大括號(「}」)。 格式項目中的大括號將按照它們遇到的 的順序進行順序解釋。不支持解釋嵌套大括號。

0

您需要使用雙括號逃脫,你想在你的輸出大括號大括號:

public override string ToString() 
{ 
    var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList); 

    return val; 
} 
1

嘗試

var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList); 
1

變化:

public override string ToString() 
{ 
    var val = string.Format("\"{0}\" : { {1} }", arrayName, fieldList); 

    return val; 
} 

public override string ToString() 
{ 
    var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList); 

    return val; 
} 

大括號解釋的方式會導致意想不到的結果。例如, 考慮格式項「{{{0:D}}}」,該格式旨在顯示一個大括號,一個格式爲十進制數的 數值和一個右大括號。然而,格式 項實際上是解釋以下列方式:

  • 前兩個開口括號(「{{」)是轉義併產生一個開口支架。

  • 接下來的三個字符(「{0:」)被解釋爲格式項目的開始。

  • 下一個字符(「D」)將被解釋爲十進制標準數字格式說明符,但接下來的兩個轉義括號(「}}」)會生成一個大括號。由於生成的字符串(「D」)不是標準數字格式說明符,因此生成的字符串被解釋爲自定義格式字符串,這意味着顯示文字字符串「D}」。

  • 最後一個大括號(「}」)被解釋爲格式項目的結尾。

  • 顯示的最終結果是文字字符串「{D}」。不會顯示要格式化的數字值。

相關問題