[英]JsonConvert.SerializeObject escaping backslash
我一直在阅读有关此问题的大量问题,但似乎无法解决我的特定问题。
我正在从Web服务函数返回json字符串。
我有这些对象:
public class WebServiceInitResult
{
public List<Activity> Activities { get; set; }
//rest of properties left out...
}
public class Activity
{
public string IconCode { get; set; }
//rest of properties left out...
}
IconCode
是字体字符的字符代码,其中之一:
\uf0b1
\uf274
\uf185
\uf0fa
\uf0f4
\uf015
它们完全如上所示存储在数据库中。
当我httpReponse.Content
如下所示设置httpReponse.Content
,反斜杠被转义:
httpResponseMessage.Content = new StringContent(JsonConvert.SerializeObject(webServiceInitResult), Encoding.UTF8, "application/json");
PostMan收到的json响应是:
"activities": [
{
"ActivityCode": 2,
"DisplayValue": "Shopping",
"BackgroundColour": "E74C3C",
"IconCode": "\\uf0b1",
"ApplicationId": 2,
"Application": null,
"Id": 1,
"Active": true,
"DateCreated": "2016-11-25T10:15:40"
},
//rest of activities
]
如您所见, IconCode
反斜杠已转义。 通过阅读其他问题,我无法自信地确定序列化或何时发送响应时Json.NET是否正在发生这种情况。
我尝试改为使用ObjectContent
进行解析,因此可以避免使用Json.NET,但返回的结果相同!
httpResponseMessage.Content = new ObjectContent(typeof(TravelTrackerWebServiceInitResult), webServiceInitResult, new JsonMediaTypeFormatter() , "application/json");
现在我被卡住了!
有没有更好的方法可以完全返回我的需要呢? 应用程序使用这些字符来显示适当的图标。
额外信息:我最初将这些值进行了硬编码,并且一切正常。
webServiceInitResult.activities_TT = new List<Activity_TT>()
{
new Activity() { ActivityCode = 2, BackgroundColour = "E74C3C", DisplayValue="Shopping", IconCode="\uf0b1" },
new Activity() { ActivityCode = 3, BackgroundColour = "BF7AC5", DisplayValue="Running", IconCode="\uf274" },
new Activity() { ActivityCode = 4, BackgroundColour = "AF7AC5", DisplayValue="Walking", IconCode="\uf185" },
new Activity() { ActivityCode = 5, BackgroundColour = "3498DB", DisplayValue="Jogging", IconCode="\uf0fa" },
new Activity() { ActivityCode = 6, BackgroundColour = "2ECC71", DisplayValue="Resting", IconCode="\uf0f4" },
new Activity() { ActivityCode = 7, BackgroundColour = "F39C12", DisplayValue="Skipping", IconCode="\uf015" }
};
谢谢。
问题是在C#语言中, string
值“ \\ uf0b1”实际上是“呈现Unicode字符F0B1”的占位符。 当字符串由编译器/运行时求值时,unicode字符将插入到该位置。
这与将字符串存储在数据库“ \\ uf0b1”中不同,后者将是实际的字符串,而不是单个字符,并且使用C#表示法编码时将是“ \\\\ uf0b1”。
感谢所有评论,我得以解决此问题。
如建议的那样,我需要获取字符代码,例如“ f0b1”并在保存到数据库之前进行转换。 因此,在我的活动控制器中,创建和编辑,我使用此处的信息添加了以下内容:
int code = int.Parse(activity.IconCode, System.Globalization.NumberStyles.HexNumber);
activity.Icon = char.ConvertFromUtf32(code);
因此,我添加了额外的属性Icon
并将代码转换为字符,然后将其保存到数据库中。 我的json响应中返回的就是这个字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.