我有一个类,该类具有名为对象数组的 Items 属性。
该属性可以具有 TextGraphics 或 BoxGraphics 类型的项目。
我正在尝试将此类反序列化为XML,JSON,BSON,c#类,从一种格式转换为其他格式。
将XML转换为c#类并将c#转换为XML(有效):
现在,当我使用XmlSeralizer类将XML反序列化为c#类时,我可以使用以下方式指定已知类型:
将JSON转换为c#类并将c#转换为JSON(不起作用):
我知道我们可以使用以下方法为该类指定已知类型:
但是我们如何指定属性?有没有类似于XmlSeralizer的属性的可用属性?
将BSON转换为c#类,将c#转换为BSON(无效):
我知道我们可以使用以下方法为该类指定已知类型:
但是我们如何指定属性?有没有类似于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; }
}