2010-12-17 19 views
0

我必須反序列化我沒有任何控制權的JSON字符串。這是一個極端的例子,但它得到了關鍵:在.NET中反序列化JSON,我無法控制

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

的JSON必須被反序列化到這個C#類,我不能改變:

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

    public int Baz { get; private set; } 

    public DateTime Xyz { get; set; } 
} 

序列化Foo是沒有問題的。

反序列化後,結果應該是...

  • Bar == "buuuu"
  • Baz == 123
  • Xyz == DateTime.MinValue或初始化

...但我有問題。

DataContractJsonSerializer,對Foo及其成員DataContractDataMember屬性一起,基本上是完美的,但它不太願意在JSON屬性和不正常的雙引號字符串。

JavaScriptSerializer似乎處理非標報價,但我不能讓它忽略Xyz或映射foo_bazBazfoo_barBar

這將成爲可分發類庫的一部分,因此我儘量避免使用第三方工具—,例如JSON.NET —。但是,如果沒有內置的方法來滿足我的需求,我很樂於接受第三方工具的建議。

+1

我討厭指出明顯,但是這就是問題所在:「除了它不太願意在JSON屬性和不正常的雙引號字符串」 ......那麼,是不是JSON,這是* *幾乎JSON ,但不是JSON。許多事情沒有適當的JSON格式就會崩潰......例如,瀏覽器上的'JSON.parse()'。您需要創建有效的JSON。 – 2010-12-17 03:25:40

+0

謝謝,但正如我在上面的第一句話中所述,我無法控制發送給我的東西。 – 2010-12-17 04:27:44

回答

0

,如果你沒有什麼獲取發送給您的任何控制,你要創建自己的自定義解析引擎,因爲沒有JSON解析將與您收到什麼可靠地工作。

也許你可以清潔/格式化您會收到成JSON字符串,然後解析它作爲JSON字符串,但除此之外,你必須寫自己的解析實現。

這部分不會很快結束。你不會喜歡它。我不是你的國王。

+0

你知道任何可以清理JSON字符串的工具或庫嗎? – 2010-12-18 02:46:42

+0

對不起,不,你可能對你自己的這個:\ – Jason 2010-12-18 21:23:02

+0

我看到你接受了這個答案。也許如果你看看http://jsonlint.com/,可以幫助你,但僅用於教育目的。你不能連接任何服務,我不相信 – Jason 2012-01-16 16:19:20