JsonSerializer反序列化字符串错误 - 无效的原语

时间:2013-12-14 07:56:57

标签: c# json deserialization

我读到了与这个问题相似的其他问题而且它们不一样。

我试图将此值转换为字符串属性:

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

属性为Id - 值应为“UVE1NjFGdVVFZU95OWdCUVZvZGc1Zzo1MDow”

该类具有以下属性:

public string Id { get; set; }

我在这个类中有其他dataTypes,Collections和bools,并且它们反序列化得很好。它不喜欢这个价值是什么?我试着把它做成小写,认为格式很差 - 不行。此值包含的是加密的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是一个String。它正在尝试填充的属性究竟是什么dataType。 在初始化我想要的对象期间调用Get方法:

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

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

1 个答案:

答案 0 :(得分:0)

出于某种原因,这是我特定问题的答案。 “值”未作为进入反序列化器的字符串处理。所以这是对'U'的轰炸并给了我原始错误。

只需在Value:

周围添加单引号即可
"Value": "'UVE1NjFGdVVFZU95OWdCUVZvZGc1Zzo1MDow'"

能够将其反序列化为字符串。这应该不是一个问题,至少我认为不应该这样。现在我想弄清楚它关心什么以及为什么它不会将它视为一个字符串开始。