我需要将Object序列化为XML并返回.XML已修复,我无法更改它.之后我无法生成这个结构bookingList.
我怎样才能"团"这些<booking>元素出现的列表中,并<error>与<counter>名单的前<booking>元素.
看我的例子:
我需要的结构....
<nicexml>
<key_id>1234567</key_id>
<surname>Jil</surname>
<name>Sander</name>
<station_id>1</station_id>
<ownBookings>
<bookingList>
<error></error>
<counter>20</counter>
<booking>
<bookingID>1234567890</bookingID>
</booking>
<booking>
<bookingID>2345678901</bookingID>
</booking>
</bookingList>
</ownBookings>
</nicexml>
Run Code Online (Sandbox Code Playgroud)
结构我得到下面的C#代码....
<nicexml>
<key_id>1234567</key_id>
<surname>Jil</surname>
<name>Sander</name>
<station_id>1</station_id>
<ownBookings>
<bookingList>
<booking>
<booking>
<bookingID>1234567890</bookingID>
</booking>
<booking>
<bookingID>2345678901</bookingID>
</booking>
<booking>
<error></error>
<counter>20</counter>
</bookingList>
</ownBookings>
</nicexml>
Run Code Online (Sandbox Code Playgroud)
C#代码:
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace xml_objects_serials
{
public class bookings
{
public class nicexml
{
public string key_id
{ get; set; }
public string …Run Code Online (Sandbox Code Playgroud) 在python 2.7(使用etree 1.3)中,我可以在这样的元素上抑制XML前缀:
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import xml.etree.ElementTree as etree
>>> etree.VERSION
'1.3.0'
>>> something = etree.Element('{http://some.namespace}token')
>>> etree.tostring(something)
'<ns0:token xmlns:ns0="http://some.namespace" />'
>>> etree.register_namespace('', 'http://some.namespace')
>>> etree.tostring(something)
'<token xmlns="http://some.namespace" />'
Run Code Online (Sandbox Code Playgroud)
该register_namespace功能在1.3中添加.我试图以与版本1.2.6的python 2.6的etree兼容的方式删除前缀.这是我尝试过的:
Python 2.6.7 (r267:88850, Jul 31 2011, 19:30:54)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on …Run Code Online (Sandbox Code Playgroud) 有没有办法在不对XmlDocument/temp字符串进行往返的情况下对对象进行de /序列化?我正在寻找以下内容:
class Program
{
static void Main(string[] args)
{
XDocument doc = new XDocument();
MyClass c = new MyClass();
c.SomeValue = "bar";
doc.Add(c);
Console.Write(doc.ToString());
Console.ReadLine();
}
}
[XmlRoot(ElementName="test")]
public class MyClass
{
[XmlElement(ElementName = "someValue")]
public string SomeValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我这样做时会出现错误(非空白字符无法添加到内容中.)如果我将该类包装在元素中,我看到写的内容是<element> ConsoleApplication17.MyClass </ element> - 所以错误说得通.
我这样做有扩展方法DE /自动序列化,但是这不是我所期待的(这是客户端,但我还是想更多的东西最佳).
有任何想法吗?
对于我正在进行的项目,我们使用了很多枚举.模型对象本身由许多小类组成; 然后,我们通过JAXB将此模型作为XML序列化到我们的DB.现在,我们希望能够使用枚举中特定方法的返回来序列化我们的枚举值; 给出的:
public enum Qualifier {
FOO("1E", "Foo type document"),
BAR("2", "Bar object");
private String code, description;
public Qualifier(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return this.code;
}
public String getDescription() {
return this.description;
}
}
Run Code Online (Sandbox Code Playgroud)
目前,当序列化为XML时,我们得到类似的东西:
<qualifier>FOO</qualifier>
Run Code Online (Sandbox Code Playgroud)
这是JAXB处理它的方式.但是,我们需要将值作为getCode()的返回值,并且我们的许多枚举都遵循该约定(使用相应的静态方法通过代码进行查找),因此上面的XML片段如下所示:
<qualifier>1E</qualifier>
Run Code Online (Sandbox Code Playgroud)
代替.我们可以对它进行注释@XmlEnum和@XmlEnumValue,但是这太乏味-一些枚举有多达30个枚举值,和手动编辑这是不好的.我们也在考虑使用自定义序列化器,但我现在想避免走那条路(但如果这是要走的路,那么我没问题).
有什么想法?
当我遇到它时,我感到很惊讶,并编写了一个控制台应用程序来检查它,并确保我没有做任何其他事情.
有谁能解释一下?
这是代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
public class Program
{
static void Main(string[] args)
{
var o = new SomeObject { Field1 = "string value", Field2 = 8 };
Console.WriteLine("ObjectToXmlViaStringBuilder");
Console.Write(ObjectToXmlViaStringBuilder(o));
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("ObjectToXmlViaStream");
Console.Write(StreamToString(ObjectToXmlViaStream(o)));
Console.ReadKey();
}
public static string ObjectToXmlViaStringBuilder(SomeObject someObject)
{
var output = new StringBuilder();
var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };
using (var xmlWriter = XmlWriter.Create(output, …Run Code Online (Sandbox Code Playgroud) 我正在使用c#序列化一个对象.我得到的结果如下所示
<?xml version="1.0"?>
<Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Users>
<User Id="11005477969327" CreateDate="06/03/2011" LastSendDate="1/1/0001" />
<User Id="11034688201594" CreateDate="04/22/2012" LastSendDate="1/1/0001" />
<Users
</User>
Run Code Online (Sandbox Code Playgroud)
但我希望得到这种格式的结果.
<?xml version="1.0"?>
<Users>
<User Id="11005477969327" SendDate="1/1/0001" NextSendDate="2/7/2012 11:13:30 AM" />
<User Id="11034688201594" SendDate="1/1/0001" NextSendDate="2/7/2012 11:13:30 AM" />
</Users>
Run Code Online (Sandbox Code Playgroud)
我的代码
public class Users
{
[XmlArray("Users")]
public List<User> ListData { get; set; }
public string GetXML()
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
XmlSerializer sr = new XmlSerializer(typeof(Users));
sr.Serialize(ms, this);
ms.Position = 0;
return System.Text.Encoding.UTF8.GetString(ms.ToArray());
}
}
public class User
{
[XmlAttribute("Id")]
public …Run Code Online (Sandbox Code Playgroud) 请参阅下面的代码,将XML写入文件包含一个包含3个对象列表的简单类.列表中的3个对象相互下降,Base,Derived1,Derived2.我在序列化期间使用XMLArrayItemAttributes覆盖名称.这在.NET 3.0中运行良好,但现在在.NET 4.0中输出不同的结果.请参阅下面的输出,特别注明第二个后代项DerivedItem2.
有没有人有这方面的经验以及我如何修复它在.NET 4.0中工作,就像在v3.5中一样?
似乎我无法控制数组项被覆盖的顺序.它似乎不是将它们添加到XMLArrayItems的顺序.
编辑:我刚刚尝试使用MONO对框架版本4.0和4.5的相同示例,它适用于那些.这可能只是微软框架版本的一个错误吗?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Xml.Serialization;
using System.Xml;
using System.Xml.Schema;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TestGroup g = new TestGroup();
XmlSerializer s = new XmlSerializer(typeof(TestGroup), g.GetOverrides());
TextWriter w = new StreamWriter("c:\\#\\test.xml");
s.Serialize(w, g);
w.Close();
}
}
public class TestGroup
{ …Run Code Online (Sandbox Code Playgroud) 如何在Python 2.6中删除XML字符串中的空格和换行符?我尝试了以下包:
etree:这个片段保留了原始的空格:
xmlStr = '''<root>
<head></head>
<content></content>
</root>'''
xmlElement = xml.etree.ElementTree.XML(xmlStr)
xmlStr = xml.etree.ElementTree.tostring(xmlElement, 'UTF-8')
print xmlStr
Run Code Online (Sandbox Code Playgroud)
我不能使用提供method参数的Python 2.7 .
minidom:同样的:
xmlDocument = xml.dom.minidom.parseString(xmlStr)
xmlStr = xmlDocument.toprettyxml(indent='', newl='', encoding='UTF-8')
Run Code Online (Sandbox Code Playgroud) DateTimeOffset当数据表示为Xml时,我在此类中拥有的属性不会被呈现.我需要做什么来告诉Xml序列化将其正确呈现为DateTime或DateTimeOffset?
[XmlRoot("playersConnected")]
public class PlayersConnectedViewData
{
[XmlElement("playerConnected")]
public PlayersConnectedItem[] playersConnected { get; set; }
}
[XmlRoot("playersConnected")]
public class PlayersConnectedItem
{
public string name { get; set; }
public DateTimeOffset connectedOn { get; set; } // <-- This property fails.
public string server { get; set; }
public string gameType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和一些样本数据......
<?xml version="1.0" encoding="utf-8"?>
<playersConnected
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<playerConnected>
<name>jollyroger1000</name>
<connectedOn />
<server>log1</server>
<gameType>Battlefield 2</gameType>
</playerConnected>
</playersConnected>
Run Code Online (Sandbox Code Playgroud)
我希望可能有一种方法通过属性,我可以在属性上装饰......
有没有办法摆脱根节点中声明的那两个命名空间?我是不是该?
我有一个带抽象属性的基类:
public abstract int ID {get;set;}
Run Code Online (Sandbox Code Playgroud)
现在,我有一个子类,它是XmlSerialized.所以它有:
[XmlElement("something")]
public override int ID {
get { //... }
set { //... }
}
Run Code Online (Sandbox Code Playgroud)
我无法将XmlElement属性移动到baseclass,因为每个子类都有不同的xml元素名.
现在,当我反序列化这个类时,我收到以下错误:
成员'Subclass.ID'隐藏继承的成员'BaseClass.ID',但具有不同的自定义属性.
我能做什么?
xml ×7
c# ×6
.net ×3
elementtree ×2
python ×2
attributes ×1
enums ×1
java ×1
jaxb ×1
linq ×1
list ×1
overriding ×1
python-2.6 ×1
stream ×1
wcf ×1