在.NET中反序列化我无法控制的JSON

时间:2010-12-17 03:21:18

标签: .net json

我必须反序列化我无法控制的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以及DataContract及其成员上的DataMemberFoo属性基本上是完美的,除非它对JSON属性和字符串不正确双引号。

JavaScriptSerializer似乎处理非标准引用,但我无法忽略Xyz或将foo_baz映射到Bazfoo_barBar

这将成为可分发类库的一部分,因此我尽可能地避免使用第三方工具(如JSON.NET)。但是,如果没有内置的方法来做我需要的东西,我愿意接受第三方工具的建议。

1 个答案:

答案 0 :(得分:0)

如果您无法控制发送给您的内容,那么您将创建自己的自定义解析引擎,因为没有JSON解析可以正确地处理您收到的内容。

也许您可以清理/格式化您收到INTO JSON字符串的字符串,然后将其解析为JSON,否则您必须编写自己的解析实现。

这部分不会很快结束。你不会喜欢它。我不是你的王。