0

举一个简单的、有点陈词滥调的例子:

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()吗?
4

1 回答 1

0

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

这里 带有自定义类型的 JavaScriptSerializer 是代码实际创建 __type 项的示例。

于 2013-11-06T18:51:07.383 回答