正确解码包含c#\ u003c或\ u00252等字符串的文本

时间:2011-05-27 08:07:29

标签: c# json

我有一个JSon响应,里面包含很多\ u003c或\ u00252或其他类似的字符串。 我需要一个合适的函数才能将这些字符串解码为正确的字符。

3 个答案:

答案 0 :(得分:3)

有关于如何反序列化JSON字符串的各种帖子。 Here显示了一个很好的反序列化通用方法。下面的代码来自那里。

public static T Deserialise<T>(string json)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
    obj = (T)serializer.ReadObject(ms); // <== Your missing line
    return obj;
} 
}

如果您正在寻找将字符串转换为ASCII的方法,请重新阅读您的帖子,然后查看this post。 ORIGinal Creadit到@Adam Sills获取此代码

static string DecodeEncodedNonAsciiCharacters( string value ) {
    return Regex.Replace(
        value,
        @"\\u(?<Value>[a-zA-Z0-9]{4})",
        m => {
             return ((char) int.Parse( m.Groups["Value"].Value, NumberStyles.HexNumber )).ToString();
        } );
}

答案 1 :(得分:2)

注意我假设你只是拥有字符串的数据部分,而不是整个JSON片段 - 即

string s = @"blah \u003c blah \u00252 blah";

如果上述假设错误且您有完整的JSON片段,只需使用JavaScriptSerializer从数据中获取对象。

令人讨厌的是,HttpUtility已编码但未解码。

你可以将字符串欺骗成一个完整的JSON对象,但这似乎有点矫枉过正:

class Dummy
{
    public string foo { get; set; }
}
static void Main(string[] args)
{
    string s = @"blah \u003c blah \u00252 blah";
    string json = @"{""foo"":""" + s + @"""}";
    string unencoded = new JavaScriptSerializer().Deserialize<Dummy>(json).foo;
}

答案 2 :(得分:0)

我不确定,但我认为您可以使用unicode字符代码直接构造char

char c='\003C'; // c|60 '<'