繁体   English   中英

JsonConvert.SerializeObject转义反斜杠

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM