标签: xmlserializer

C# XML 序列化覆盖 IXmlSerialized 类的类型

最初的问题

我想动态serialize更改List<IXmlSerializable>XmlType (所以我不能使用属性标签来做到这一点)IXmlSerializable

我尝试使用XmlAttributeOverrides来执行此操作,但到目前为止尚未成功。

以下是说明该问题的示例代码:
IXmlSerialized 类(来自MSDN):

public class Person : IXmlSerializable
{
    // Private state
    private string personName;


    // Constructors
    public Person(string name)
    {
        personName = name;
    }

    public Person()
    {
        personName = null;
    }


    // Xml Serialization Infrastructure
    public void WriteXml(XmlWriter writer)
    {
        writer.WriteString(personName);
    }

    public void ReadXml(XmlReader reader)
    {
        personName = reader.ReadString();
    }

    public XmlSchema GetSchema()
    {
        return (null);
    }


    // Print
    public override string ToString() …
Run Code Online (Sandbox Code Playgroud)

.net c# xml-serialization ixmlserializable xmlserializer

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

如何使用 XmlSerializer 通过 DefaultValueAttribute 序列化属性?

我用来XmlSerializer将 C# 对象序列化为 XML。我有DefaultValueAttribute一些我尝试序列化的类的属性,当我尝试序列化它们时,XmlSerializer如果它等于默认值,则似乎不包含 xml 中的值。看这个例子:

using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace Test
{
    public class Person
    {
        [System.Xml.Serialization.XmlAttribute()]
        [System.ComponentModel.DefaultValue("John")]
        public string Name { get; set; }
    }

    public static class Test
    {
        public static void Main()
        {
            var serializer = new XmlSerializer(typeof(Person));
            var person = new Person { Name = "John" };

            using (var sw = new StringWriter())
            {
                using (var writer = XmlWriter.Create(sw))
                {
                    serializer.Serialize(writer, person);
                    var xml = sw.ToString();
                } …
Run Code Online (Sandbox Code Playgroud)

c# xml attributes xmlwriter xmlserializer

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

使用 xsi:nil="true" C# 序列化删除 xml 元素

我有一个 XML,其中包含一些值,有时可能存在空值,如下所示: 我根本不希望在 XML 中列出带有 null 的节点!元素IsNullable = true在类中设置。任何建议,因为我在谷歌中尝试了很多东西......没有任何帮助!

<?xml version="1.0" encoding="utf-8"?>
<Materials>
  <Material>
    <MaterialName>ABC</MaterialName>
    <Weight Value="0.303">
      <Weight_A xsi:nil="true" />
      <Weight_B xsi:nil="true" />
    </Weight>
    <Density Value="800">
      <Density_A xsi:nil="true" />
      <Density_B xsi:nil="true" />
    </Density>
    <Volume Value="8771.427" />
  </Material>
  <Material>
    <MaterialName>ABC</MaterialName>
    <Weight>
      <V5_Weight>2.009</V5_Weight>
      <V6_Weight>1.3318154561904</V6_Weight>
    </Weight>
    <Density>
      <V5_density>1000</V5_density>
      <V6_density>663</V6_density>
    </Density>
    <Volume Value="2008771.427" />
  </Material>
</Materials>
Run Code Online (Sandbox Code Playgroud)

类结构如下:

[XmlRoot(ElementName = "Weight")]
public class Weight
{
    [XmlElement(ElementName = "Weight_A", IsNullable = true)]
    public string Weight_A { get; set; }

    [XmlElement(ElementName = "Weight_B", IsNullable = …
Run Code Online (Sandbox Code Playgroud)

c# xml serialization xmlserializer

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

Symfony Serializer XML 向根节点添加自定义属性

使用 Serializer 组件(在 Symfony4 中)生成 XML 文件时,我想向根节点添加自定义属性,但我不知道如何添加。

文件提到如何命名根节点,但不知道如何添加自定义属性。

在我的服务中,我有:

use Symfony\Component\Serializer\Serializer;
// ..

// $this->serializer is auto-wired
$this->serializer->serialize($myEntityObjectToSerialize, 'xml', [
  'xml_format_output' => true,
  'xml_encoding' => 'utf-8',
  'xml_root_node_name' => 'document'
]);
Run Code Online (Sandbox Code Playgroud)

这会产生:

<?xml version="1.0" encoding="utf-8"?>
<document>
// ...
</document>
Run Code Online (Sandbox Code Playgroud)

但我想要这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<document id="123" lang="Eng">
// ...
</document>
Run Code Online (Sandbox Code Playgroud)

我不知道我错过了什么。感谢您的帮助。

xml xmlserializer symfony symfony4

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

XmlSerializer.Deserialize - 忽略不必要的元素?

我有一个XSD架构,我已经生成了一个使用xsd.exe的类,我试图用来XmlSerializer.Deserialize从一个应该符合XSD架构的XML文件创建该类的实例.不幸的是,XML文件有一些额外的元素,架构不期望这些元素会导致System.InvalidOperationException抛出Deserialize.

我已经尝试<xs:any>在我的架构中添加元素,但这似乎没有任何区别.

我的问题是:有没有办法XmlSerializer.Deserialize忽略这些额外的元素?

c# serialization xsd xmlserializer

3
推荐指数
1
解决办法
3799
查看次数

更改XmlSerializer序列化空元素的方式

我正在使用XmlSerializer.它将对象序列化很好,但客户端要求所需的空元素采用这种格式<star:Confirm/>.序列化器将序列化空元素,以便<star:Confirm></star:Confirm>有一种方法可以将其更改为序列化客户端所需的方式.

c# xmlserializer

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

XmlSerializer +多态性

给定(设计的)基类,以及我们想要使用XmlSerializer通过WCF序列化的子类.我们根据文章装饰一个集合(参见响应类):

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.aspx(请参阅备注部分).

问题是虽然似乎生成了正确的WSDL,但SVCUtil生成一个类文件,其中GetUserResponse类包含名为Items的属性.这与将[XmlElement]应用于数组有关吗?虽然XmlArray元素没有Type属性.

提前致谢.

[Serializable]
[XmlType]
public class UserBase
{
    public int Id {get;set;}
}

[Serializable]
[XmlType]
public class BasicUser : UserBase
{
    public string UserName {get;set;}
}

[Serializable]
[XmlType]
public class SuperUser : UserBase
{
    public string UserName {get;set;}
    public bool SpecialLevel {get;set;}

}

[Serializable]
[XmlType]
public class GetUserResponse
{
    [XmlElement("Users", typeof(User)), XmlElement("SuperUsers", typeof(SuperUser))]
    public List<UserBase> Users {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

c# inheritance xmlserializer

3
推荐指数
1
解决办法
3710
查看次数

c#XML序列化

我想序列化这样的东西,其中有一个标题和一个正文.

第一部分"galleryData"是标题第二部分是"imageData" - 为图库中的每个图像重复

<galleryData>
    <title>some title</title>
    <uuid>32432322</uuid>
    <imagepath>some path</imagepath>
</galleryData>

<imageData>
    <title>title one</title>
    <category>nature</category>
    <description>blah blah</description>
</imageData>

<imageData>
     <title>title two</title>
     <category>nature</category>
     <description>blah blah</description> 
</imageData>

<imageData>
    <title>title three</title>
    <category>nature</category>
    <description>blah blah</description>
</imageData>
Run Code Online (Sandbox Code Playgroud)

如果我不需要标题区域,我会看到如何做到这一点.我目前只是使用xmlwriter来创建它,但我想将对象序列化为xml.

c# xml xmlserializer

3
推荐指数
1
解决办法
316
查看次数

序列化时的订单字段

我是xml序列化一个对象,我似乎无法改变字段序列化的顺序.

public class foo{
string a {get;set;}
string b {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

出来的(伪代码)

<foo b="world" a="hello" />
Run Code Online (Sandbox Code Playgroud)

当我需要的时候

<foo a="hello" b="world" />
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

c# serialization xml-serialization xmlserializer

3
推荐指数
1
解决办法
463
查看次数

将Type参数转换为T.

我对如何将一个类型参数传递给一个参数的方法感到有点困惑.

public class MyNamespaceXmlFormatter : XmlMediaTypeFormatter
{
    public override Task WriteToStreamAsync(Type type, object value, 
                                            Stream writeStream, HttpContent content, 
                                            TransportContext transportContext, System.Threading.CancellationToken cancellationToken)
    {
        XElement xmloutput = XElementSerialiser.ToXElement<type>(value);

        ...........
Run Code Online (Sandbox Code Playgroud)

我尝试了以下,但这些也失败了;

XElement xmloutput = XElementSerialiser.ToXElement<(T)type>(value);

XElement xmloutput = XElementSerialiser.ToXElement<typeof(type)>(value);
Run Code Online (Sandbox Code Playgroud)

显然这是编译,但没有多大意义;

XElement xmloutput = XElementSerialiser.ToXElement<Type>(value);
Run Code Online (Sandbox Code Playgroud)

c# generics xelement xmlserializer

3
推荐指数
1
解决办法
840
查看次数