2010-12-17 13 views
0

JSON文字列を逆シリアル化する必要があります。これは極端な例ですが、それは全体のポイントを取得します。.NETでJSONを逆シリアル化することはできません

string fooJson = @" 
{ 
    'foo_baz': 123, 
    foo_bar: 'buuuu', 
    ""Xyz"": ""\/Date(405928800000-0600)\/"" //1982-11-12 
}"; 

JSONは私が変更することはできません。このC#クラスにデシリアライズする必要があります。Fooのシリアル

public class Foo 
{ 
    public string Bar { get; set; } 

    public int Baz { get; private set; } 

    public DateTime Xyz { get; set; } 
} 

は問題ありません。デシリアライズした後、結果は...

  • Bar == "buuuu"
  • Baz == 123
  • Xyz == DateTime.MinValueまたは初期化されていない

でなければなりません

...しかし、私は問題があります。それが適切に二重引用符で囲まれていないJSONのプロパティと文字列にbalks以外

DataContractJsonSerializerは、DataContractDataMemberFooの属性とそのメンバーと一緒に、基本的には完璧です。

JavaScriptSerializerは、非標準の引用を扱うようだが、私はそれがBarBazfoo_barXyzまたはマップfoo_bazを無視することができません。

これは配布可能なクラスライブラリの一部であるため、できるだけ多くのJSON.NET —などのサードパーティのツール—は使用しないようにしています。しかし、私が必要とすることをするための組み込みの方法がない場合、私はサードパーティのツールの提案に公開しています。

+1

私は明白なことを指摘するのは嫌ですが、これは問題です:「JSONプロパティと文字列が正しく二重引用符で囲まれていないことを除いて」....それはJSONではなく、ほぼ* JSON JSONではなく、適切なJSONの書式設定がなければ、多くのことが起こります。例えばJSON.parse()です。有効なJSONを作成する必要があります。 –

+0

ありがとうございます。上記の最初の文章で述べたように、私は何が私に送られるのかについて何の支配もしていません。 –

答えて

0

あなたに送信されるものを制御できない場合は、受信しているJSON解析が確実に機能しないため、独自のカスタム解析エンジンを作成します。

JSON文字列で受け取った文字列をクレンジング/書式設定してJSONとして解析することもできますが、それ以外の場合は独自の解析実装を作成する必要があります。

この部分はすぐに終了しません。あなたはそれを楽しむことはありません。私はあなたの王ではない。

+0

JSON文字列を浄化するツールやライブラリがありますか? –

+0

申し訳ありませんが、あなたはこの上にあなた自身の上にあるかもしれません:\ – Jason

+0

私はあなたがこの答えを受け入れたことを見ました。おそらくあなたがhttp://jsonlint.com/を見て、あなたを助けることができるかもしれませんが、教育的な目的のためだけです。あなたはそのサービスまで何かを結ぶことはできません、私は信じていません – Jason

関連する問題