在C#中反序列化Json

时间:2009-11-12 09:12:25

标签: c# json

{"person": "david",
 "images":
  {"usable_sizes":
    [[[150,
       41],
      "image1.png"],
     [[220,
       61],
      "image2.png"],
     [[220,
       61],
      "image3.png"]],
   "uploader": null}}

我在C#中使用JavaScriptSerializer来解析一些JSON。以上是我从webrequest回来的字符串。对字符串调用Deserialize会将Person放在对象中的正确位置,但我不知道嵌套在“images”下的数组使用什么类型。我完全失去了。

这里是相关代码:

TopLevelObject topObj = new JavaScriptSerialize().Deserialize<TopLevelObj>(jsonStream);

public TopLevelObject
{
    public string person;
    public imgStruct images;
}

public class imgStructure
{
    public List<string[,][]> available_sizes;
}

但是没有采取。我已经为该类尝试了各种其他形式,但是如果没有正确的密钥,则无法进行反序列化以放入数据。我无法更改入站JSON,因为我正在从第三方使用它。

2 个答案:

答案 0 :(得分:2)

这就是我认为你的课程应该是这样的:

public class RootObj
{
    public string person;
    public ImageDataObj images;
}

public class ImageDataObj
{
    public object uploader;
    public List<List<object>> usable_sizes
}

如您所见,内部列表是一个对象列表。这是因为列表具有不同类型的项目:一个是列表(数字数据[150,41]),另一个是字符串(图像名称)。由于这个原因,我认为你不能强烈输入内部列表。 也许值得在运行时(使用VS调试工具)检查内部列表中对象的结构,这可以指示如何映射它。

如果你接受了详细信息,那easy_images属性类型的外观如下:

public List<List<Dictionary<List<int>,string>>> usable_sizes

但这只是猜测。

答案 1 :(得分:0)

我建议前往JSON.org并使用其中一个预先构建的解决方案。