将Delphi对象树序列化为XML的好方法是什么 - 使用RTTI而不是自定义代码?
我本来希望发现这个功能已经内置到Delphi中,但它似乎并没有.
我发现了一些似乎可以执行此功能的组件(在下面发布).你有没有使用过它们或其他产品?你有自己的建造吗?我在Delphi中遗漏了一些明显的东西吗?
我遇到了使用布尔值反序列化XML文件的问题.我反序列化的源XML文件是从VB6应用程序创建的,其中所有布尔值都是大写的(True,False).当我尝试反序列化XML时,我得到了一个
System.FormatException: The string 'False' is not a valid Boolean value.
Run Code Online (Sandbox Code Playgroud)
有没有办法说用属性忽略大小写?
我希望转换一个看起来像这样的类......
public class Amenity {
public String id;
public String value;
}
Run Code Online (Sandbox Code Playgroud)
使用JaxB注释将以下XML转换为以下XML:
<amenity id="id-string-here">value-string-here</amenity>
Run Code Online (Sandbox Code Playgroud)
有谁知道在value成员变量上使用什么注释来完成这个?我到目前为止最接近的是:
@XmlRootElement
public class Amenity {
@XmlAttribute
public String id;
@XmlElement
public String value;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种方法不允许我指定value不应将成员变量呈现为自己的标记<value></value>.
如何使自己的自定义类可序列化?我特别想把它写到iPhone上的文件中,只是plist而你的类只是一个简单的实例类,只是NSStrings而且可能是NSUrl.
我有一个问题反序列化一些XML; 由第三方提供的XML非常冗长,因此如果没有为特定元素设置值,它将提供并清空元素(例如<element1 />).
这是某些元素的问题,例如,那些用于存储整数的元素.我可以控制第三方,所以我可以让他们指定默认值(<myinteger>0</myinteger>)或者我可以让他们完全省略这些元素.这两个都应该避免这个问题.
但是,将来可能会出现这样的情况,即我们没有那么多控制权 - 在这种情况下,是否有一种方法可以通过装饰指定默认值?
[XmlElement("myinteger")=0???]
public int MyInteger
{
get
{
return myInteger;
}
set
{
myInteger= value;
}
}
Run Code Online (Sandbox Code Playgroud) c# serialization xml-serialization default-value xml-deserialization
我很困惑 - 我应该何时使用XML序列化,何时应该在.NET框架中使用二进制序列化?
.net c# serialization xml-serialization binary-serialization
using System;
public class clsPerson
{
public string FirstName;
public string MI;
public string LastName;
}
class class1
{
static void Main(string[] args)
{
clsPerson p=new clsPerson();
p.FirstName = "Jeff";
p.MI = "A";
p.LastName = "Price";
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
x.Serialize(Console.Out, p);
Console.WriteLine();
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
取自http://support.microsoft.com/kb/815813
1)
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
Run Code Online (Sandbox Code Playgroud)
这条线做什么?什么是GetType()?
2)如何获得编码
<?xml version="1.0" encoding="utf-8"?>
< clsPerson xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Run Code Online (Sandbox Code Playgroud)
代替
<?xml version="1.0" encoding="IBM437"?>
<clsPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3
.org/2001/XMLSchema">
Run Code Online (Sandbox Code Playgroud)
或者根本不包括编码类型?
我正面临一个问题,即使用Simple XML Serialization框架(simpleframework.org)成功序列化的XML文件反序列化.
有一个例外抛出:
org.simpleframework.xml.core.PersistenceException: Constructor not matched for class projet.sarelo.Note
Run Code Online (Sandbox Code Playgroud)
这是电话:
Serializer serializer = new Persister();
File xmlFile = new File(path);
ContactList contactList = serializer.read(ContactList.class, xmlFile); <== Error
Run Code Online (Sandbox Code Playgroud)
我的ContactList.java
@Root(strict=false, name="ContacList")
public class ContactList {
@ElementArray (name = "Contacts")
Contact [] contact;
}
Run Code Online (Sandbox Code Playgroud)
我的Note.java
public class Note {
@Element(required=false)
private String note;
public Note(String note) {
super();
this.note = note;
}
public String getNote() {
return note;
}
}
Run Code Online (Sandbox Code Playgroud)
我的Contact.java
@Root
public class …Run Code Online (Sandbox Code Playgroud) 我正在尝试阅读XML文档.我的XML:
<?xml version="1.0" encoding="utf-8"?>
<SplashScreen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Path>SplashScreen/Image-King</Path>
</SplashScreen>
Run Code Online (Sandbox Code Playgroud)
我的代码是读取XML:
XmlGameScreen = new XmlManager<GameScreen>();
XmlGameScreen.Type = currentscreen.Type;
currentscreen = XmlGameScreen.Load("LoadXML/SplashScreen.xml");
Run Code Online (Sandbox Code Playgroud)
和
public Type Type;
public T Load(string path)
{
T instance;
using (TextReader textreader = new StreamReader(path))
{
XmlSerializer xml = new XmlSerializer(Type);
instance = (T)xml.Deserialize(textreader);
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误instance = (T)xml.Deserialize(textreader);我的XML文档是错误的吗?我想读<Path>.更新:我的内部异常:无法序列化'MyRPGgame.SplashScreen._image'类型成员'Microsoft.Xna.Framework.Graphics.Texture2D'
我试图使用XmlSerializer和继承序列化一些对象,但我在排序结果时遇到了一些问题.
下面是一个类似于我设置的示例:〜
public class SerializableBase
{
[XmlElement(Order = 1)]
public bool Property1 { get; set;}
[XmlElement(Order = 3)]
public bool Property3 { get; set;}
}
[XmlRoot("Object")]
public class SerializableObject1 : SerializableBase
{
}
[XmlRoot("Object")]
public class SerializableObject2 : SerializableBase
{
[XmlElement(Order = 2)]
public bool Property2 { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想要的结果如下:〜
<Object>
<Property1></Property1>
<Property2></Property2>
<Property3></Property3>
</Object>
Run Code Online (Sandbox Code Playgroud)
但是我得到的结果是:〜
<Object>
<Property1></Property1>
<Property3></Property3>
<Property2></Property2>
</Object>
Run Code Online (Sandbox Code Playgroud)
有谁知道它是否可能或任何替代方案?
谢谢
c# ×6
xml ×5
.net ×2
java ×2
android ×1
annotations ×1
asp.net ×1
boolean ×1
delphi ×1
iphone ×1
jaxb ×1
jaxb2 ×1
objective-c ×1
rtti ×1
web-services ×1