0

やることはかなり単純で、何らかの理由でこれを理解できません。次のようなモック JSON ファイルがあります。

  {
  "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 ファイル (1 つの巨大な行を意味する) からすべてを取り除いたところ、同じ結果が得られました。奇妙なことに、Newtonsoft.Json を使用するとエラーは発生しませんが、動的オブジェクトは AccountId 文字列だけで、他には何もありません。

4

1 に答える 1

2

UTF-8ファイルを読み取るようにコーディングすると、次のように間違っています。

  • 1024バイト境界での切断が原因で潜在的に不完全なバイトシーケンスを変換しようとします
  • 最後のセグメントのファイルの長さを無視するため、余分な0バイトを追加します。

StreamReaderまたはその他の組み込みメソッドを使用して、ファイルから文字列を読み取ることを検討してください。開始点については、「方法:ファイルからテキストを読み取る」および「File.ReadAllText 」を参照してください。

var dynamicObject = Json.Decode(
  File.ReadAllText(@"c:\users\bryan\Desktop\test2.json"));
于 2012-08-15T01:36:41.523 に答える