我遇到了一个奇怪的问题。你可以看到我的测试代码
[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吗?
答案 0 :(得分:1)
由于您没有用双引号包装 Isometext , DataContractJsonSerializer 将其视为数字格式,似乎在考虑
N为NaN
和
我为无限
并且,NewtonSoft.JSON似乎比DataContractJsonSerializer更好地处理它。见http://www.newtonsoft.com/json/help/html/JsonNetVsDotNetSerializers.htm
答案 1 :(得分:-1)
不知道为什么它对大写字母和非大写字母的行为有所不同,但要修复它,你需要将字符串值包含在“”中,例如\“isometext \”。