将值“utf-8”转换为类型“System.Text.Encoding”时出错

Posted

技术标签:

【中文标题】将值“utf-8”转换为类型“System.Text.Encoding”时出错【英文标题】:Error converting value "utf-8" to type 'System.Text.Encoding' 【发布时间】:2020-11-25 07:41:06 【问题描述】:

我想反序列化 Json 文件。 Json 值包含一个 Encoding 类值。反序列化 json 值时会导致以下错误。

Json 格式


  "HostConnection": 
    "Address": "testAddress",
    "MessageEncoding": "utf-8",
    
   

在上面的Json中,

HostConnection 是一个类名 地址是字符串数据类型 MessageEncoding 是一种 Encoding 数据类型

序列化

var deserializedData= JsonConvert.DeserializeObject<HostConnection>(jsonVal);

谁能告诉我为什么会这样。

【问题讨论】:

所以你想把字符串“utf-8”变成System.Encoding UTF-8的实例? @CodeCaster 有可能吗? 是的,但你必须想知道你是否想要那个。为什么要序列化编码?您可以使用中间对象进行(反)序列化,或使用非序列化属性在字符串和编码之间进行映射:public Encoding Encoding get return Encoding.GetEncoding(_encodingName); @CodeCaster 实际上我不能像您所说的那样更改数据类型,因为它是由客户提供的。所以现在我调用了一个转换器方法来覆盖 Read json 反序列化方法,因为 Encoding 类是一个抽象类。但是我仍然没有得到正确的输出 这是否可以序列化 WCF 中的编码类。 【参考方案1】:

这是因为如果Encoding的值设置为UTF-8,在转成json的时候,不是"MessageEncoding": "utf-8",而是如下结构:


    "Address":"String content",
    "MessageEncoding":
        "dataItem":
            "m_bodyName":"String content",
            "m_dataIndex":2147483647,
            "m_flags":4294967295,
            "m_headerName":"String content",
            "m_uiFamilyCodePage":2147483647,
            "m_webName":"String content"
        ,
        "decoderFallback":
            "bIsMicrosoftBestFitFallback":true
        ,
        "encoderFallback":
            "bIsMicrosoftBestFitFallback":true
        ,
        "m_codePage":2147483647,
        "m_isReadOnly":true
    

这是我的演示:

            HostConnection hostConnection = new HostConnection();
            hostConnection.Address = "Test";
            hostConnection.MessageEncoding = Encoding.UTF8;
            string json=JsonConvert.SerializeObject(hostConnection);
            Console.WriteLine(json);

如果问题仍然存在,请随时告诉我。

【讨论】:

我想通过 Json 发送编码类型而不是代码。 并非所有类型都可以反序列化。不要尝试序列化/反序列化编码。可以参考这个链接:github.com/JamesNK/Newtonsoft.Json/issues/2238

以上是关于将值“utf-8”转换为类型“System.Text.Encoding”时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Flow 将值转换为另一种类型?

Expression.Error:我们无法将值 3 转换为函数类型

Pandas - 将值作为字符串类型转换为浮点数

Newtonsoft JSON反序列化问题[将值转换为类型时出错]

将 JSON 对象脱盐到数据表时将值“1D”转换为类型“System.Int64”时出错

使用 Json.Net 进行 C# 枚举反序列化:将值转换为类型时出错