我想动态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) 我用来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) 我有一个 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) 使用 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)
我不知道我错过了什么。感谢您的帮助。
我有一个XSD架构,我已经生成了一个使用xsd.exe的类,我试图用来XmlSerializer.Deserialize从一个应该符合XSD架构的XML文件创建该类的实例.不幸的是,XML文件有一些额外的元素,架构不期望这些元素会导致System.InvalidOperationException抛出Deserialize.
我已经尝试<xs:any>在我的架构中添加元素,但这似乎没有任何区别.
我的问题是:有没有办法XmlSerializer.Deserialize忽略这些额外的元素?
我正在使用XmlSerializer.它将对象序列化很好,但客户端要求所需的空元素采用这种格式<star:Confirm/>.序列化器将序列化空元素,以便<star:Confirm></star:Confirm>有一种方法可以将其更改为序列化客户端所需的方式.
给定(设计的)基类,以及我们想要使用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) 我想序列化这样的东西,其中有一个标题和一个正文.
第一部分"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.
我是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)
有人可以帮忙吗?
我对如何将一个类型参数传递给一个参数的方法感到有点困惑.
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) xmlserializer ×10
c# ×9
xml ×4
.net ×1
attributes ×1
generics ×1
inheritance ×1
symfony ×1
symfony4 ×1
xelement ×1
xmlwriter ×1
xsd ×1