JavaScriptSerializer是否支持任何类型的提示?

时间:2013-11-06 18:45:48

标签: c# .net json serialization deserialization

举一个简单的,有些陈词滥调的例子:

public interface IShape
{
  public void Draw();
}

public class Rectangle : IShape
{
  public Double X;
  public Double Y;
  public Double Width;
  public Double Height;

  public void Draw()
  {
    // draw the rectangle ... 
  }
}

public class Circle : IShape
{
  public Double X;
  public Double Y;
  public Double Radius;

  public void Draw()
  {
    // draw the Circle ... 
  }
}

使用JavaScriptSerializer,可以在属性中添加什么格式(如果有)类型提示反序列化它?

JavaScriptSerializer js = new JavaScriptSerializer();
Shape s = js.Deserialize<Shape>("{ \"X\": 1.0, \"Y\": 1.0, \"Radius\": 3.0 }");

文档简要提及使用__type属性:

  

使用JSON字典语法的JavaScript对象。特殊元数据   包含名为“__type”的属性以确保正确的反序列化。   确保公共实例属性具有get和set访问器   确保正确的反序列化。

但是,我找不到任何特定于JavaScriptSerializer的文档来指定正确的格式 - 或者如何让Serialize()包含该属性。


  • 我需要做些什么才能使Serialize()包含正确的类型提示?
  • 如果采用何种格式手动编写,是否需要为Deserialize()添加类型提示?

1 个答案:

答案 0 :(得分:0)

我认为你不需要__type,因为这些是普通类型。提示是这样一个javascript嵌套对象可以分配给一个类型,在c#中可能更通用,所以类型可以保留细节

这里 JavaScriptSerializer with custom Type 是代码实际创建__type项的示例。