2013-12-14 31 views
1

我读过与此类似的其他问题,它们并不相同。JsonSerializer反序列化字符串错误 - 无效的原语

我试图让这个值转换成字符串属性:

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

该物业为标识 - 值应该是“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) 
}; 

希望这是足够的信息,让我知道如果你需要我详细说明什么。谢谢你的时间。

+0

无效的JSON ... –

+0

这是真的。我添加了额外的数据以使其有效。 – DeepToot

回答

0

由于某些原因,这是我的特殊问题的答案。 '价值'不是作为进入Deserializer的字符串处理的。所以它在'U'上轰炸并给了我原始错误。

通过简单地增加一个单引号围绕价值:

"Value": "'UVE1NjFGdVVFZU95OWdCUVZvZGc1Zzo1MDow'" 

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

相关问题