DataContractJsonSerializer错误地处理某些值

时间:2016-02-26 10:54:54

标签: c# json wcf datacontractjsonserializer

我遇到了一个奇怪的问题。你可以看到我的测试代码

[DataContract]
public class Test
{
    [DataMember]
    public string Name { get; set; }
}
private static void Main(string[] args)
{
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("{ \"Name\" :   Isometext  }"));
    var s = new DataContractJsonSerializer(typeof(Test));
    var r = (Test)s.ReadObject(ms);
    Console.WriteLine(r.Name);
}
  

name = Isometext - 确定

     

name = Tsometext -Exception

     

name = Nsometext - 确定

     

name = sometext - Exception

     

name = nsometext - 异常

为什么DataContractJsonSerializer将以大写 I N 开头的值视为正确值?是bug吗?

2 个答案:

答案 0 :(得分:1)

哇,进一步深入挖掘我here

由于您没有用双引号包装 Isometext DataContractJsonSerializer 将其视为数字格式,似乎在考虑

  

N为NaN

  

我为无限

并且,NewtonSoft.JSON似乎比DataContractJsonSerializer更好地处理它。见http://www.newtonsoft.com/json/help/html/JsonNetVsDotNetSerializers.htm

答案 1 :(得分:-1)

不知道为什么它对大写字母和非大写字母的行为有所不同,但要修复它,你需要将字符串值包含在“”中,例如\“isometext \”。