标签: xmlserializer

axis2 maven示例

我尝试使用axis2(1.5.1)版本从wsdl文件生成java代码,但我无法弄清楚什么是正确的pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
            <version>1.5.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>wsdl2code</goal>
                    </goals>
                    <configuration>
                        <wsdlFile>src/main/resources/wsdl/stockquote.wsdl</wsdlFile>
                        <databindingName>xmlbeans</databindingName>
                        <packageName>a.bc</packageName>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2</artifactId>
        <version>1.5.1</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

当我输入mvn编译时,它会抱怨

Retrieving document at 'src/main/resources/wsdl/stockquote.wsdl'.
java.lang.ClassNotFoundException: org.apache.xml.serializer.TreeWalker
Run Code Online (Sandbox Code Playgroud)

如果我试图找到TreeWalker,找到一个合适的jar文件是一团糟.

你有人能给我一些提示吗?或者给我正确的pom.xml

[更新] xalan-2.7.0.jar也需要依赖,并且jar文件被破坏(由于nexus问题),thx pascal

wsdl axis2 maven-2 wsdl2code xmlserializer

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

控制C#中的序列化顺序

我正在使用XmlSerializer序列化对象并将其写入文件.我已经取得了相当大的成功,序列化器在嵌套元素方面做了我想做的事情,以及序列化为元素与属性的内容.不幸的是,我遇到了一个问题,我需要一个类的一个成员在另一个之前序列化.在其他地方,对我来说,无论先声明的是什么,都会先被序列化,但在这种情况下,我并没有取得如此大的成功.有没有办法手动控制事物序列化的顺序?

serialization xmlserializer

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

从xmlserializer中删除编码

我使用以下代码创建一个xml文档 -

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
new XmlSerializer(typeof(docket)).Serialize(Console.Out, i, ns); 
Run Code Online (Sandbox Code Playgroud)

这非常适合创建没有命名空间属性的xml文件.我想在根元素中也没有编码属性,但我找不到办法.有没有人知道是否可以这样做?

谢谢

c# xmlserializer

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

使用泛型与XmlSerializer

在C#中使用XML序列化时,我使用如下代码:

public MyObject LoadData()
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
    using (TextReader reader = new StreamReader(settingsFileName))
    {
        return (MyObject)xmlSerializer.Deserialize(reader);
    }
}
Run Code Online (Sandbox Code Playgroud)

(以及类似的反序列化代码).

它需要铸造而且不是很好.有没有办法,直接在.NET Framework中使用泛型与序列化?也就是说写下这样的东西:

public MyObject LoadData()
{
    // Generics here.
    XmlSerializer<MyObject> xmlSerializer = new XmlSerializer();
    using (TextReader reader = new StreamReader(settingsFileName))
    {
        // No casts nevermore.
        return xmlSerializer.Deserialize(reader);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# oop generics xml-serialization xmlserializer

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

默认情况下,如何使XmlSerializer生成属性而不是元素

有没有办法使XmlSerializer原始类成员(例如字符串属性)序列化为XML属性,而不是XML元素,不必[XmlAttribute]在每个属性声明前写入?即是否有一个全局开关告诉XmlSerializer将所有原始类成员序列化为XML属性?

假设我们有以下类:

public class Person
{
    public string FirstName
    {
       ...
    }

    public string LastName
    {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后XmlSerializer默认生成此代码:

<Person>
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
</Person>
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是这段代码:

<Person FirstName="John" LastName="Doe"/>
Run Code Online (Sandbox Code Playgroud)

再说一遍:我想在没有[XmlAttribute](或没有XmlAttributeOverrides,这将是更多的工作)的情况下做到这一点.

一种可能的解决方案是使用通用后处理步骤,该步骤应用XSLT转换将元素转换为属性.但我想知道是否有一个更简单的解决方案.

.net c# xml-serialization xmlserializer

14
推荐指数
1
解决办法
3973
查看次数

XmlRootAttribute是可继承的吗?

我有一个用C#的XmlSerializer序列化的类.它标有XmlRoot属性,我想在派生类中继承此属性.

查看文档时,它没有说XmlRoot使用AttributeUsageAttribute将Inherit设置为false(Inherit应该默认为true),但是在尝试反序列化没有XmlRoot属性的继承类时出错("<rootNode xmlns ='' >没想到.").

这目前有效:

[Serializable()]
[XmlRoot("rootNode")]
public class BaseClass
{
    [XmlAttribute("attributeA")]
    public int A { get; set; }
}

[Serializable()]
[XmlRoot("rootNode")]
public class InheritedClass : BaseClass
{
    [XmlElement("elementB")]
    public int B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,但我想要的是:

[Serializable()]
[XmlRoot("rootNode")]
public class BaseClass
{
    [XmlAttribute("attributeA")]
    public int A { get; set; }
}

[Serializable()]
public class InheritedClass : BaseClass
{
    [XmlElement("elementB")]
    public int B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可能会尝试将反序列化的XML InheritedClass看起来像这样:

<rootNode attributeA="abc">
    <elementB>123</elementB> …
Run Code Online (Sandbox Code Playgroud)

c# inheritance attributes xmlserializer

13
推荐指数
1
解决办法
2927
查看次数

C#Xml序列化列表<T>后代与Xml属性

早上好,

我有一个从List下载并拥有公共属性的集合.Xml序列化程序没有提升我的能力.列表项序列化很好.我尝试过XmlAttribute属性无济于事.你们有解决方案吗?

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var people = new PersonCollection
        {
            new Person { FirstName="Sue", Age=17 },
            new Person { FirstName="Joe", Age=21 }
        };
        people.FavoritePerson = "Sue";

        var x = new XmlSerializer(people.GetType());
        var b = new StringBuilder();
        var w = XmlTextWriter.Create(b, new XmlWriterSettings { NewLineChars = "\r\n", Indent = true });
        x.Serialize(w, people);
        var s = b.ToString();
    }
}

[XmlRoot(ElementName="People")]
public class PersonCollection : …
Run Code Online (Sandbox Code Playgroud)

c# generics attributes list xmlserializer

13
推荐指数
1
解决办法
5468
查看次数

WCF错误"对象图中可以序列化或反序列化的最大项目数为'65536'"

我在WCF调用上收到以下错误:

在对象图中可以序列化或反序列化的最大项数是'65536'

我已经阅读了大量的论坛帖子,其中许多人提到修改app.config和web.config以指定允许更大对象图的新行为.我已经做到了,这就是我在这些文件中所拥有的:

关于WPF项目的App.Config:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>

  </endpointBehaviors>

</behaviors>

<services>
  <service name="digiPM.Shell.LogOutPMSEMRService.PMSEMRLogOutService">
    <!--<endpoint address="" binding="basicHttpBinding" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" />
      </baseAddresses>
    </host>-->
    <endpoint address="" binding="netTcpBinding" name="NetTcpBindingEndpoint" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" name="MexTcpBidingEndpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" />
      </baseAddresses>
    </host>
  </service>
</services>

<!--binding info - …
Run Code Online (Sandbox Code Playgroud)

.net wcf datacontractserializer servicebehavior xmlserializer

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

使用XmlSerializer反序列化随机/未知类型

我正在使用XmlSerializer与服务进行通信.这不是常规的SOAP服务,它有自己的XML对象类型.例如,我可能会要求一个<Capabilities>对象,但它可能会返回一个<Exception>.换句话说,我必须处理随机的XML文档类型.但是,我知道我必须处理哪些类型.

我想要做的是找到一个通用的方法来序列化/反序列化这些文档.问题是XmlSerializer需要在创建阶段知道类型.

这些不是封装在公共根元素中,因此[XmlInclude]在这种情况下,创建基类并使用该属性不起作用:

[XmlInclude(typeof(Exception))]
[XmlInclude(typeof(Capabilities))]
public abstract class BaseClass
{
  public BaseClass()
  {
    SchemaLocation = "test";
  }

  [XmlAttribute("schemaLocation")]
  public String SchemaLocation { get; set; }
}

[XmlRoot("Exception")]
public class Exception : BaseClass
{
  public Exception():base()
  {
  }
  [XmlElement]
  public String Message { set; get; }
}

[XmlRoot("Capabilities")]
public class Capabilities : BaseClass
{
  public Capabilities() : base()
  {}
  [XmlElement]
  public String ServiceName { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的解决方案是使用XmlReader手动探测根元素,然后在创建XmlSerializer实例之前将其映射到正确的类型.

有没有更好的方法呢?

.net c# xml serialization xmlserializer

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

XML(de)序列化无效字符串在c#中不一致?

在C#(.net 4.0和4.5/vs2010和vs12)中,当我使用XMLSerializer序列化包含具有非法字符的字符串的对象时,不会引发错误.但是,当我反序列化该结果时,会抛出"无效字符"错误.

        // add to XML
        Items items = new Items();
        items.Item = "\v hello world"; // contains "illegal" character \v

        // variables
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Items));
        string tmpFile = Path.GetTempFileName();

        // serialize
        using (FileStream tmpFileStream = new FileStream(tmpFile, FileMode.Open, FileAccess.ReadWrite))
        {
            serializer.Serialize(tmpFileStream, items);
        }
        Console.WriteLine("Success! XML serialized in file " + tmpFile);

        // deserialize
        Items result = null;
        using (FileStream plainTextFile = new FileStream(tmpFile, FileMode.Open, FileAccess.Read))
        {
            result = (Items)serializer.Deserialize(plainTextFile); //FAILS here
        }

        Console.WriteLine(result.Item);
Run Code Online (Sandbox Code Playgroud)

"Items"只是由xsd/c Items.xsd自动生成的一个小类.Items.xsd只不过是一个包含一个子元素(Item)的根元素(Items):

<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization illegal-characters xmlserializer

13
推荐指数
1
解决办法
8844
查看次数