ServiceStack使用制表符和新行反序列化json

时间:2013-10-30 10:39:23

标签: c# json servicestack

我有读取JSON内容的代码:

using (var reader = new StreamReader(path))
{
    return TypeSerializer.DeserializeFromReader<Symulacja>(reader);
}

仅当json文件类似时才有效:

{Width:1,Height:1}

我喜欢编写文件:

{
    Width: 1
    , Height: 1
}

TypeSerializer.DeserializeFromReader无法对其进行解析并在null属性中设置Symulacja

3 个答案:

答案 0 :(得分:2)

使用ServiceStack的JsonSerializer序列化JSON而不是TypeSerializer which is the JSV Format

using (var reader = new StreamReader(path))
{
    return JsonSerializer.DeserializeFromReader<Symulacja>(reader);
}

同样,.ToJson().FromJson<T>()扩展方法有助于使用JSON消费包,例如:

string json = dto.ToJson();
MyDto json.FromJson<MyDto>();

答案 1 :(得分:0)

这是因为TypeSerializer类从称为JSV(JSON + CSV)的混合格式序列化和反序列化,这种格式与JSON不同。阅读this帖子了解更多详情。

您可以使用其他库(如JSON.Net)来反序列化您的JSON数据。

答案 2 :(得分:0)

你可以这样做,首先尝试在这里解析你的Json字符串\

http://json.parser.online.fr/

如果它通过那里然后转到http://json2csharp.com/ ...粘贴你的字符串......它将生成一个带属性的类

然后

将类粘贴到代码中。并为类创建新对象

并调用Deserialize

JavaScriptSerializer js = new JavaScriptSerializer();
   var Data = DeserializeFromJson<Test>("Json String");
public T DeserializeFromJson<T>(string json)
{
    System.Web.Script.Serialization.JavaScriptSerializer ObjJSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    T deserializedProduct = ObjJSerializer.Deserialize<T>(json);
    return deserializedProduct;
}
 public class Test
{
    public int Width { get; set; }
    public int Height { get; set; }
}