JsonSerializer反序列化字符串错误-基元无效

本文关键字:无效 错误 反序列化 字符串 JsonSerializer | 更新日期: 2024-09-21 10:48:43

我读到了其他与此类似的问题,但它们并不相同。

我正在尝试将此值转换为字符串属性:

{
    "Save": {
        "InArguments": [
            {
                "ArgumentName": "Id",
                "Value": "UVE1NjFGdVVFZU95OWdCUVZvZGc1Zzo1MDow"
            }
        ]
    }
}

属性为Id-值应为"UVE1NjFGdVVFZU95OWdCUVZvZGc1Zzo1MDow"

类具有以下属性:

public string Id { get; set; }

我在这个类中有其他数据类型,集合和布尔,它们被反序列化得很好。这个价值观有什么不喜欢的地方?我试着把它做成小写,认为格式不好——不行。这个值包含的是一个加密的Id。

以下是我如何在InArguments类的json中获得我想要的特定项:

 public new T Get(ActivityContext activityContext)
    {
        var item = activityContext.DataContext.Arguments.Find(r => r.ArgumentName.ToLower() == ArgumentName);
        try
        {
            if (null != item)
            {
                if (null != item.Value)
                {
                    Type argumentType = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);
                    var jsSerializer = new JavaScriptSerializer();
                    return (T)jsSerializer.Deserialize<T>(item.Value.ToString());                        
                }
                else
                {
                    return default(T);
                }
            }
            return default(T);
        }                
        catch (Exception ex)
        {
            //log exception
        }
        return default(T);
    }

返回的ArgumentType是一个字符串。它正试图填充的属性的数据类型。Get方法是在初始化我想要得到的对象时调用的:

var sendDefinitionRestHandler = new SendDefinitionRestHandler()
            {
                Id = Id.Get(activityContext)
 };

希望这是足够的信息,如果你需要我详细说明什么,请告诉我。谢谢你抽出时间。

JsonSerializer反序列化字符串错误-基元无效

出于某种原因,这是我的特定问题的答案。"Value"未作为进入反序列化程序的字符串进行处理。所以它轰炸了"U",给了我原始错误。

只需在值周围添加一个引号:

"Value": "'UVE1NjFGdVVFZU95OWdCUVZvZGc1Zzo1MDow'"

它能够将其反序列化为字符串。一开始这不应该是个问题,至少我认为不应该。现在我正试图弄清楚它关心的是什么,以及为什么它一开始就不把它看作一根绳子。