标签: xml-serialization

在序列化XML时更改元素的顺序

我需要将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)

c# xml list xml-serialization

23
推荐指数
1
解决办法
2万
查看次数

在ElementTree 1.2中抑制名称空间前缀

在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)

python xml xml-serialization elementtree

23
推荐指数
2
解决办法
2万
查看次数

直接/从XML Linq序列化

有没有办法在不对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 /自动序列化,但是这不是我所期待的(这是客户端,但我还是想更多的东西最佳).

有任何想法吗?

c# xml linq xml-serialization

22
推荐指数
1
解决办法
1万
查看次数

通过JAXB为枚举提供自定义值序列化

对于我正在进行的项目,我们使用了很多枚举.模型对象本身由许多小类组成; 然后,我们通过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个枚举值,和手动编辑这是不好的.我们也在考虑使用自定义序列化器,但我现在想避免走那条路(但如果这是要走的路,那么我没问题).

有什么想法?

java xml enums jaxb xml-serialization

22
推荐指数
2
解决办法
1万
查看次数

通过StringBuilder使用XmlWriter进行XML序列化是utf-16而via Stream是utf-8?

当我遇到它时,我感到很惊讶,并编写了一个控制台应用程序来检查它,并确保我没有做任何其他事情.

有谁能解释一下?

这是代码:

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 wcf stream xml-serialization

22
推荐指数
1
解决办法
2万
查看次数

xml序列化 - 删除命名空间

我正在使用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)

c# xml-serialization

22
推荐指数
2
解决办法
4万
查看次数

XML序列化 - .NET 4.0中的不同结果

请参阅下面的代码,将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)

.net c# xml serialization xml-serialization

22
推荐指数
1
解决办法
2048
查看次数

删除XML字符串中的空格

如何在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)

python xml xml-serialization elementtree python-2.6

21
推荐指数
3
解决办法
3万
查看次数

我如何XML序列化DateTimeOffset属性?

DateTimeOffset当数据表示为Xml时,我在此类中拥有的属性不会被呈现.我需要做什么来告诉Xml序列化将其正确呈现为DateTimeDateTimeOffset

[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)

更新

我希望可能有一种方法通过属性,我可以在属性上装饰......

奖金问题

有没有办法摆脱根节点中声明的那两个命名空间?我是不是该?

.net xml-serialization

21
推荐指数
4
解决办法
1万
查看次数

重写属性上的.net XmlSerializer

我有一个带抽象属性的基类:

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',但具有不同的自定义属性.

我能做什么?

.net c# attributes overriding xml-serialization

21
推荐指数
1
解决办法
5859
查看次数