如何取消DataContractJSONSeralizer和Mongo.Bson的对象类型属性的已知类型?

时间:2019-07-24 14:59:54

标签: c# serialization deserialization xml-serialization

我有一个类,该类具有名为对象数组 Items 属性。

该属性可以具有 TextGraphics BoxGraphics 类型的项目。

我正在尝试将此类反序列化为XML,JSON,BSON,c#类,从一种格式转换为其他格式。

将XML转换为c#类并将c#转换为XML(有效):

现在,当我使用XmlSeralizer类将XML反序列化为c#类时,我可以使用以下方式指定已知类型:

  1. [XmlElement(“ box_graphic”,typeof(BoxGraphic))]
  2. [XmlElement(“ text_graphic”,typeof(TextGraphic))]

将JSON转换为c#类并将c#转换为JSON(不起作用):

我知道我们可以使用以下方法为该类指定已知类型:

  1. [KnownType(typeof(BoxGraphic))]
  2. [KnownType(typeof(TextGraphic))]

但是我们如何指定属性?有没有类似于XmlSeralizer的属性的可用属性?

将BSON转换为c#类,将c#转换为BSON(无效):

我知道我们可以使用以下方法为该类指定已知类型:

  1. [BsonDiscriminator(Required = true)]
  2. [BsonKnownTypes(typeof(BoxGraphic),typeof(TextGraphic))]

但是我们如何指定属性?有没有类似于XmlSeralizer的属性的可用属性?

[Serializable]
[DataContract]
[XmlType(AnonymousType = true)]
public class Graphics
{
    [DataMember]
    //[KnownType(typeof(BoxGraphic))]
    //[KnownType(typeof(TextGraphic))]
    //[BsonDiscriminator(Required = true)]
    //[BsonKnownTypes(typeof(BoxGraphic), typeof(TextGraphic))]
    [XmlElement("box_graphic", typeof(BoxGraphic))]
    [XmlElement("text_graphic", typeof(TextGraphic))]
    public object[] Items { get; set; }
    [DataMember]
    [XmlAttribute("algorithm")]
    public string Algorithm { get; set; }
}

[Serializable]
[DataContract]
[XmlType(AnonymousType = true)]
public class BoxGraphic
{
    [DataMember]
    [XmlElement("name")]
    public string Name { get; set; }
    [DataMember]
    [XmlElement("rectangle")]
    public Rectangle Rectangle { get; set; }
    [DataMember]
    [XmlElement("line_style")]
    public string LineStyle { get; set; }
    [DataMember]
    [XmlElement("line_width")]
    public decimal LineWidth { get; set; }//byte
    [DataMember]
    [XmlElement("line_color")]
    public Color LineColor { get; set; }
    [DataMember]
    [XmlElement("fgd_color")]
    public Color FGDColor { get; set; }
    [DataMember]
    [XmlElement("bgd_color")]
    public Color BGDColor { get; set; }
    [DataMember]
    [XmlElement("fill_pattern")]//object
    public string FillPattern { get; set; }
}

[Serializable]
[DataContract]
[XmlType(AnonymousType = true)]
public class TextGraphic
{
    [DataMember]
    [XmlElement("name")]
    public string Name { get; set; }
    [DataMember]
    [XmlElement("origin")]
    public Position Origin { get; set; }
    [DataMember]
    [XmlElement("end")]
    public Position End { get; set; }
    [DataMember]
    [XmlElement("text")]
    public string Text { get; set; }
}

0 个答案:

没有答案