2015-02-09 148 views
-2

我有一块JSON,我想进入一个字符串供C#使用。问题是,当我逃避所有双引号时,它似乎不再有效。例如:如何在字符串包含双引号时将JSON读入JObject?

string jsonString = " {[ { \"FieldId\": \"Fields.364\", \"FieldName\": \"LoanNo\", \"Precision\": \"0\" } , { \"FieldId\": \"Fields.4002\", \"FieldName\": \"LastNameB\" } ]}"; 
     JObject jsettings = JObject.Parse(jsonString); 

有没有更容易的方法来获取一个JSON字符串到C#JObject?

+1

那些转义只是为了让它成为C#的有效字符串。 “编译”字符串将不包含转义。 – 2015-02-09 21:40:57

+6

双引号不是问题 - '“{[”'不是任何有效的JSON字符串的开始。你有一个对象的开始('{'),所以我们看到的下一个应该是一个键('\“foo \”');相反,你有一个数组的开始。 – 2015-02-09 21:41:40

回答

4

你不是实际上转义任何双引号,就JSON而言 - 该字符串不包含任何反斜杠。您可以用Console.WriteLine(jsonString);来确认。

问题是,您目前在对象中直接获取了一个数组 - 这不是有效的JSON。

如果你改变它,这样的阵列是财产,它的罚款:

string jsonString = " { \"foo\":[ { /* rest as before */ } ] }"; 

,结束了为JSON:

{ 
    "foo": [ 
    { 
     "FieldId": "Fields.364", 
     "FieldName": "LoanNo", 
     "Precision": "0" 
    }, 
    { 
     "FieldId": "Fields.4002", 
     "FieldName": "LastNameB" 
    } 
    ] 
} 

(只需使用Console.WriteLine(jsettings);代码后你'd发布。)

+0

似乎工作..我想我的问题是我只是采取了大字符串的起始部分,因此错过了正确的关闭 – punkouter 2015-02-09 21:48:44

+0

什么是反斜杠?如果我逃避它(两个反斜杠),json将不会解析{“FieldId”:“Fields.2180”,“FieldName”:“Marksman \ Costco”}, – punkouter 2015-02-10 19:57:20

+0

@punkouter:在字符串文字中需要* 4个反斜杠在C#中 - 你想要一个带有两个反斜杠的字符串(对于JSON),并且你也必须为字符串字面值转义每个字符串。或者使用逐字字符串文字。或者(更简单)只是从文件加载文本,用于测试目的 - 然后C#文字语法*不会妨碍。 – 2015-02-10 22:51:29

相关问题