2012-08-15 134 views
0

很简单的事情要做,我不能因为某种原因找出这一个。我有一个模拟的JSON文件看起来像这样:解析一个JSON文件并得到“无效的JSON基元: 0 0 0 0”

{ 
    "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()" 
    } 
    ] 
} 

而且我需要从这个创建一个动态的对象,因为这每一个测试样机的运行时间可以改变。我已经尝试了自定义解串器的注意in this solutio还有.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字符串,没有其他字符。

回答

2

您代码来读取UTF-8文件是错误的,因为它:

  • 尝试潜在的不完整的字节序列转换由于对1024字节边界切削
  • 追加额外0字节由于忽略长度该文件在最后一段。

考虑使用StreamReader或其他内置方法从文件中读取字符串。起始点见How to:Read Text from a FileFile.ReadAllText

var dynamicObject = Json.Decode(
    File.ReadAllText(@"c:\users\bryan\Desktop\test2.json")); 
+0

是的,我错过了树林通过树木好吧。感谢深夜的帮助。 – BryanGrimes 2012-08-15 01:43:50