【问题标题】:How can I remove escape characters from my JSON object being displayed in Fiddler如何从 Fiddler 中显示的 JSON 对象中删除转义字符
【发布时间】:2013-06-26 15:13:44
【问题描述】:

我想将我的 C# 对象序列化为 JSON 对象,但不包含包含转义字符的最终文本字符串。

通过 RESTful 设计调用以下方法,并在通过提琴手调用时返回以下 JSON 对象,但是我想删除反斜杠,使其仅包含双引号并尊重 JSON 格式。

"{\"model\":\"Faslev\",\"platform\":\"ABC\",\"year\":2010,\"month\":\"June\", \"plant\":\"ONDH\",\"country\":\"Brazil\"}"

public string GetModelBySerialNumber(string serialNumber)
{
    var model = new Model();
    using (var connection = new SqlConnection(DBUtility.DbConnection))
    {
        try
        {                    
            SqlCommand myProcedure = new SqlCommand("myProcedure", connection);
            myProcedure.CommandType = CommandType.StoredProcedure;
            myProcedure.Parameters.Add("@SerialNumber", SqlDbType.NVarChar).Value = serialNumber;
            connection.Open();
            SqlDataReader dataReader = myProcedure.ExecuteReader();
            while (dataReader.Read())
            {
                Func<int, string> GetString =  (int i) => dataReader.GetString(i);
                Func<int, Int32> GetInteger = (int i) => dataReader.GetInt32(i);
                model.ModelName = GetString(0);
                model.Platform = GetString(1);
                model.Year = GetInteger(2);
                model.Month = GetString(3);
                model.Plant = GetString(4);
                model.Country = GetString(5);                                                
            }                    
        }
        catch (SqlException exception) {Trace.WriteLine("Error Trace " + exception.Message);}
        finally {connection.Close();}
    }
    return JsonConvert.SerializeObject(model);
}

如果我使用连接,如下所示,那么对象会在没有反斜杠的情况下正确显示,但我真的不想这样做,因为它似乎是写出对象的一种过于复杂的方式。

public string Ping()
{
    return "{Message" + ":" + "PONG" + "}";
}

"{Message:PONG}"

【问题讨论】:

  • 只有当我在序列化model的字符串结果上调用SerializeObject 再次 时才能发生这种情况。
  • 您在使用 Web API 吗?如果是这样,请将您的方法返回类型更改为模型,然后简单地返回模型。 Web API 将为您序列化它。
  • @AndrewWhitaker 我不确定我是否理解。如果我重复序列化过程,我会得到两倍的反斜杠 string s = JsonConvert.SerializeObject(modelFabrication);返回 JsonConvert.SerializeObject(s);
  • 当然——我的意思是如果我序列化模型两次,我只能使用斜线。我建议您的结果在某处再次被序列化,这就是您看到斜线的原因。
  • @BrianRogers 感谢您的评论,它已经奏效了。你以不同的方式解决了我的问题。你应该把它作为一个答案。

标签: c# json rest json.net fiddler


【解决方案1】:

如果您使用的是 Web API,则无需调用 JsonConvert.SerializeObject()。将方法的返回类型更改为 Model 类(而不是 string),然后简单地返回模型。 Web API 将为您序列化它。

【讨论】:

  • “将方法的返回类型更改为模型”是什么意思?我有同样的问题。但是不知道“模型”是什么意思。
  • @Gandarez 如果您查看他问题中的代码,他正在创建一个名为Model 的对象,然后将其序列化为字符串并返回该字符串。我是说他应该将方法的返回类型更改为他的Model 类(而不是字符串),然后只返回该对象而不对其进行序列化。在您自己的代码中,您正在使用的对象/类的名称可能不是Model
【解决方案2】:

根据需要更新响应字符串,然后反序列化并返回。

return Request.CreateResponse(HttpStatusCode.OK, JsonConvert.DeserializeObject(corr_str, new JsonSerializerSettings()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2023-04-09
    • 2021-10-14
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多