我一直在阅读有关此问题的大量问题,但似乎无法解决我的特定问题。
我正在从 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
时,反斜杠被转义了:
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 响应中返回的正是这个字符。