- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我有一个类 Texture2DProcessor,它继承了 IXmlSerializable 并隐式转换为 Texture2D
public static implicit operator Texture2D(Texture2DProcessor o)
{
return o.Data;
}
public static implicit operator Texture2DProcessor(Texture2D o)
{
return o == null ? null : new Texture2DProcessor(o);
}
然后我有一个结构 GunProperties,它包含一个 Texture2D 属性和一个类型设置为 Texture2DProcessor 的 XmlElement 属性
Texture2D _sideSprite;
[XmlElement(typeof(Texture2DProcessor))]
public Texture2D SideSprite
{
get { return _sideSprite; }
set { _sideSprite = value; }
}
我收到以下运行时错误
Cannot serialize member '...GunProperties.SideSprite' of type 'Microsoft.Xna.Framework.Graphics.Texture2D'
为什么XmlSerializer不使用Texture2DProcessor读写Xml数据?
我还知道我的 ReadXml 和 WriteXml 方法有效,因为它们工作正常并且我能够使用纹理。
Texture2D texture;
XmlSerializer serializer = new XmlSerializer(typeof(Texture2DProcessor));
serializer.Deserialize(new FileStream(path, FileMode.Open), texture);
我遇到这个麻烦的原因是我正在使用 monogame,内容管道非常困惑,尤其是对于自定义类型,除此问题外,我一切正常。
最佳答案
看起来这可能是 Mono XmlSerializer
的限制。我有一个在 .NET 下运行的小型测试应用程序,但不能在 Mono 3.0.6 下运行。
但这看起来很容易变通:
[XmlIgnore]
public Texture2D SideSprite { get; set; }
[XmlElement("SideSprite")]
[EditorBrowsable(EditorBrowsableState.Never)]
public Texture2DProcessor SideSpriteProcessor
{
get { return SideSprite; }
set { SideSprite = value; }
}
我们在我的 Noda Time 项目中遇到了同样的问题,因为 XML 序列化不能很好地与不可变类型混合。我几乎已经给出了 same advice那里。
编辑:好的,下面是一些可以工作的示例代码:
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
public class Person
{
public string Name { get; set; }
}
public class PersonWrapper : IXmlSerializable
{
public Person Person { get; set; }
public static implicit operator Person(PersonWrapper wrapper)
{
return wrapper == null ? null : wrapper.Person;
}
public static implicit operator PersonWrapper(Person person)
{
return new PersonWrapper { Person = person };
}
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
string name = reader.ReadString();
reader.ReadEndElement();
Person = new Person { Name = name };
}
public void WriteXml(XmlWriter writer)
{
writer.WriteString(Person.Name);
}
}
public class Company
{
[XmlElement(typeof(PersonWrapper))]
public Person Director { get; set; }
[XmlElement(typeof(PersonWrapper))]
public Person Manager { get; set; }
}
class Test
{
static void Main()
{
var serializer = new XmlSerializer(typeof(Company));
var original = new Company
{
Director = new Person { Name = "Holly" },
Manager = new Person { Name = "Jon" }
};
var writer = new StringWriter();
serializer.Serialize(writer, original);
Console.WriteLine("XML:");
Console.WriteLine(writer.ToString());
var reader = new StringReader(writer.ToString());
var deserialized = (Company) serializer.Deserialize(reader);
Console.WriteLine("Deserialized:");
Console.WriteLine("Director: {0}", deserialized.Director.Name);
Console.WriteLine("Manager: {0}", deserialized.Manager.Name);
}
}
关于C# [XmlElement] 属性不隐式转换类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621617/
是否可以有相同的@XmlElement,其名称不是常量名称?例如我想要这个: MyObject myObj = new MyObject("myName"); @XmlElement(name=myO
我正在从 REST 服务获取 XML,如下所示: 1 1970-01-01 78.67 2 1450-09-17 24.56
我正在尝试弄清楚 NSXMLParser,但我不确定为什么它不起作用。我应该输出名字和姓氏以及年龄,但它输出的是一个数字。 XML 是 Anthony Robbins 5
) 我有一个可以来自不同类型的 xmlelement。与类型无关,它具有相同的名称。它可以是一个对象,也可以只是通过 URI 对现有对象的引用。我认为 xmlElements 可能是解决方案。编码工作
说我有以下 xml Gambardella, Matthew Ralls, Kim Corets, Eva
我在 SELECT 查询中使用 XMLELEMENT(tagname,value)。它无法识别变量的值。取而代之的是,它将变量名作为标记名。 //前 l_0_l := t_array(l_inde
我正在尝试将 JAXB 用于已经以某种格式编写 XML 的应用程序。我必须遵守向后兼容性问题的格式。 我在一个类中有以下代码段: @XmlElement( name = "field" ) priva
我有这样的 XML 结构: La météo de la semaine This week’s weather Wetter Woche 消息在多种语言中重复
我正在尝试学习如何在 java 中将对象存储为 XML 文件,但遇到了一些问题。 我发现的大多数教程都说我应该将 @XmlElement 注释与 set 方法一起使用,但是还有另一种使用它们的方法,因
我想弄清楚如何注释一个类变量,以便它最多可以有一个基本类型的元素——但具体类型可以是三个不同类之一。这是一个示例,希望可以解释我要完成的任务。 public class A extends Basec
我有一个 super 类型的列表,即 List foo 该列表包含来自两个不同子类型的对象: public class FooBar implements IFoo{ } public class F
我这里有一个情况,试图充当两个 API 之间的网关。我需要做的是: 向 APIa 提出请求; 将 XML 响应解析(编码)为 java 对象; 稍作改动; 然后以 XML 格式(解码)向另一端 (AP
我想知道是否可以从 XmlElement 字段继承,例如 public class A{ [XmlElement(ElementName = "Something", Form =
将 C# 对象转换为 XmlEmenet 的最佳方法是什么?我是只使用 XmlSerializer 并导入 XmlNode 还是有更好的方法? 这是我在那里发现的,想知道是否还有其他更好的方法。 pu
所以我有一个类 Texture2DProcessor,它继承了 IXmlSerializable 并隐式转换为 Texture2D public static implicit operator Te
在我的 C# 应用程序中,我正在创建一个基于数据库值的 XML。它工作正常,直到字符串不是特殊字符。下面是我的代码。 XmlDocument doc = new XmlDocument(); Xm
这就是我正在做的: @XmlType(name = "foo") @XmlAccessorType(XmlAccessType.NONE) public final class Foo { @Xm
我正在创建一个 XML 文档并尝试在 XMLElement 之间插入标签,如下所示 let tEle = XMLElement.element(withName: "xuv") as? XMLElem
是否有一些简单的方法可以将 XmlElement 转换为 string ? 最佳答案 如果内容是文本,这将获取元素的内容: element.Value 这将获取元素的内容作为 XML: element
一段时间以来,我在向属性添加命名空间时遇到了问题。我的要求是创建 xml,它将在子元素而不是 root 上具有命名空间 uri。我将 jaxb 与 eclipselink moxy、jdk7 一起使用
我是一名优秀的程序员,十分优秀!