C# 解析JSON文件并获取;无效的JSON原语:\0\0\0\0;
这件事做起来很简单,但我不知为什么搞不懂。我有一个模拟JSON文件,看起来是这样的:C# 解析JSON文件并获取;无效的JSON原语:\0\0\0\0;,c#,json,dynamic,deserialization,C#,Json,Dynamic,Deserialization,这件事做起来很简单,但我不知为什么搞不懂。我有一个模拟JSON文件,看起来是这样的: { "AccountId":"XXXXXXXXX", "UAN":"PE3458234758345", "BillingName":"John Smith", "BillingAddress": { "Address1":"701 First Ave.", "Address2":"test", "City":"Philadelphia", "State":"P
{
"AccountId":"XXXXXXXXX",
"UAN":"PE3458234758345",
"BillingName":"John Smith",
"BillingAddress": {
"Address1":"701 First Ave.",
"Address2":"test",
"City":"Philadelphia",
"State":"PA",
"Zip:":"19147"
},
"ServiceStartDate":"5/1/2012",
"PromoCode":"0056",
"PartnerCode":"AAL",
"MemberNumber":"0000001",
"Invoices":[
{
"Amount":"113.78",
"Date":"6/1/2012",
"Usage":"3143"
},
{
"Amount":"123.56",
"Date":"7/1/2012",
"Usage":"4561"
},
{
"Amount":"105.23",
"Date":"8/1/2012",
"Usage":"5454"
}
],
"Expected":[
{
"AwardCreation":"true",
"AwardAmount":"500",
"AwardUnits":"usd",
"AwardDate":"today()"
}
]
}
我需要从中创建一个动态对象,因为每次运行一个测试模型时,这个对象可能会有所不同。我尝试了如上所述的自定义反序列化程序以及.NET 4.0 System.Web.Helpers,在这两种情况下,我最终得到了:
Invalid JSON primitive: \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...
目前我的工作测试是:
var json = new StringBuilder();
using (var fs = File.Open(@"c:\users\bryan\Desktop\test2.json", FileMode.Open))
{
var byteArray = new byte[1024];
var tempString = new UTF8Encoding(true);
while (fs.Read(byteArray, 0, byteArray.Length) > 0)
{
json.Append(tempString.GetString(byteArray));
}
}
var dynamicObject = Json.Decode(json.ToString());
Assert.IsNotNull(dynamicObject);
我不知道,我猜是格式?我已经从json文件中剥离了所有内容(意味着一行巨大的代码),得到了同样的结果。奇怪的是,当我使用Newtonsoft.Json时,我没有得到错误,但是动态对象只是AccountId字符串,其他什么都没有 读取UTF-8文件的代码是错误的,因为它:
- 尝试转换由于在1024字节边界上剪切而可能不完整的字节序列
- 由于忽略最后一段中文件的长度,所以追加额外的0字节
var dynamicObject = Json.Decode(
File.ReadAllText(@"c:\users\bryan\Desktop\test2.json"));
是的,我穿过树林错过了森林。谢谢你深夜的帮助。