具有相同请求的奇怪Json行为

时间:2014-08-05 06:47:40

标签: c# json asp.net-mvc-4 dynamic

我正在使用WebApi发送json数据,我有Json结构包含:

{"totalAmount":0.01,"transactions":[{"Tokens":1,"transactionDI":1,"deviceUserDI":2,"routeDI":1,"DateTimeProceed":"\/Date(1406482920000+0100)\/","Typetran":1,"usedtokens":[{"usedtokenValue":9.32,"usedtokenType":3,"usedtokenId":"d798ee2d920e488487014d2a5ce46e7f"}]}],"numberofTransactions":1,"type":"insertit","validation":"68W956!8$97123@Y$"}

我使用fiddler发送的内容正在使用dynamic objectData进行访问,然后使用JsonConvert.DeserializeObject进行反序列化。

之后我将objectData.ToString()的相同请求插入数据库, 相同的结果存储在数据库中(字符串结果)。

但是当我尝试

{
  "totalAmount": 0.01,
  "transactions": [
    {
      "Tokens": 1,
      "transactionDI": 1,
      "deviceUserDI": 2,
      "routeDI": 1,
      "DateTimeProceed": "\/Date(1406482920000+0100)\/",
      "Typetran": 1,
      "usedtokens": [
        {
          "usedtokenValue": 9.32,
          "usedtokenType": 3,
          "usedtokenId": "d798ee2d920e488487014d2a5ce46e7f"
        }
      ]
    }
  ],
  "numberofTransactions": 1,
  "type": "insertit",
  "validation": "68W956!8$97123@Y$"
}

这以我上面使用的相同方式存储数据,但它以我发送的相同格式存储到数据库中

现在数据库中两者之间的区别是:

enter image description here

我用于获取请求的方法

[HttpPost]
public JObject UploadIT(dynamic objectData)
{
  //stuffs
}

有人能告诉我为什么以不同的方式插入相同的记录?

2 个答案:

答案 0 :(得分:1)

根据您的操作代码,行为是正确的。 由于您的objectData包含换行符,并且您只是将其插入数据库,因此会保留换行符。

您可以尝试objectData.ToString().Replace("\r\n", string.Empty);

更新:您可以执行objectData.ToString().Replace(" ", string.Empty).Replace("\r\n", string.Empty);

如果您确定某些请求来自Windows,则可以使用Environment.Newline代替\r\n

更新2 :如果您要存储漂亮的打印版本,则必须重新序列化transactionData:JsonConvert.SerializeObject(transactionData, Formatting.Indented);我并非100%确定如果它会在':'之后插入空格,但您可以随时.Replace(":", ": ");

答案 1 :(得分:0)

解决使用:

dynamic model = JObject.Parse(objectData.ToString());

我正在使用objectData.ToString()并再次将其解析为动态对象,并且它将我无法找到的空间添加到数组中。

如果我不想再次将其分配给动态对象,我可以直接使用JObject.Parse(objectData.ToString())