GVKun编程网logo

c# – XML序列化 – XmlCDataSection为Serialization.XmlText(c# xml序列化 不应该有xmlxn)

17

如果您想了解c#–XML序列化–XmlCDataSection为Serialization.XmlText的相关知识,那么本文是一篇不可错过的文章,我们将对c#xml序列化不应该有xmlxn进行全面详

如果您想了解c# – XML序列化 – XmlCDataSection为Serialization.XmlText的相关知识,那么本文是一篇不可错过的文章,我们将对c# xml序列化 不应该有xmlxn进行全面详尽的解释,并且为您提供关于.net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?、.net – 如何选择Xml序列化,DataContractSerializer和LINQ to XML来序列化简单对象树?、.NET: Xml.Serialization常用对象导图、c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性的有价值的信息。

本文目录一览:

c# – XML序列化 – XmlCDataSection为Serialization.XmlText(c# xml序列化 不应该有xmlxn)

c# – XML序列化 – XmlCDataSection为Serialization.XmlText(c# xml序列化 不应该有xmlxn)

我在使用c#序列化cdata部分时遇到问题

我需要将XmlCDataSection对象属性序列化为元素的innertext.

我要找的结果是这样的:

<Test value2="Another Test">
  <![CDATA[<p>hello world</p>]]>
</Test>

为了产生这个,我使用这个对象:

public class Test
{
    [System.Xml.Serialization.XmlText()]
    public XmlCDataSection value { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string value2 { get; set; }
}

在value属性上使用xmltext注释时,将引发以下错误.

system.invalidOperationException:
There was an error reflecting property
‘value’. —>
system.invalidOperationException:
Cannot serialize member ‘value’ of
type System.Xml.XmlCDataSection.
XmlAttribute/XmlText cannot be used to
encode complex types

如果我注释掉注释,序列化将起作用,但cdata部分被放入一个值元素,这对我想要做的事情没有好处:

<Test value2="Another Test">
  <value><![CDATA[<p>hello world</p>]]></value>
</Test>

任何人都可以指出我正确的方向让这个工作.

谢谢,亚当

解决方法

谢谢理查德,现在才有机会回到这一点.我想我已经通过你的建议解决了这个问题.我使用以下方法创建了一个Cdatafield对象:
public class Cdatafield : IXmlSerializable
    {
        private string elementName;
        private string elementValue;

        public Cdatafield(string elementName,string elementValue)
        {
            this.elementName = elementName;
            this.elementValue = elementValue;
        }

        public XmlSchema GetSchema()
        {
            return null;
        }

        public void WriteXml(XmlWriter w)
        {
            w.WriteStartElement(this.elementName);
            w.WriteCData(this.elementValue);
            w.WriteEndElement();
        }

        public void readxml(XmlReader r)
        {                      
            throw new NotImplementedException("This method has not been implemented");
        }
    }

.net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?

.net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?

我们正在从 XML序列化/反序列化一个类,但是我们要排除的类中有属性和字段.

System.NonSerialized和System.Xml.Serialization.XmlIgnore属性似乎做了这个工作,但它们有什么区别?看来我们可以在类的任何一个属性或者字段上使用XmlIgnore.但是NonSerialized只能在字段上使用.在任何情况下是否有任何理由不使用XmlIgnore,如果是这样,NonSerialized属性的目的是什么?为什么使用不同?

这是允许的:

<System.NonSerialized()> _
Public Foo As String

这是允许的:

<System.Xml.Serialization.XmlIgnore()> _
Public Foo As String

这是允许的:

<System.Xml.Serialization.XmlIgnore()> _
Public Property Bar() As String
    Get
        Return _Bar
    End Get
    Set(ByVal value As String)
        _Bar = value
    End Set
End Property

但这是不允许的:

<System.NonSerialized()> _
Public Property Bar() As String
    Get
        Return _Bar
    End Get
    Set(ByVal value As String)
        _Bar = value
    End Set
End Property
NonSerialized适用于比XML更多类型的序列化.如果您将序列化为二进制或SOAP,则使用NonSerialized,如果使用XmlSerializer严格序列化为XML,则使用XmlIgnore.请参阅MSDN上 NonSerializedAttribute课程的备注部分.

.net – 如何选择Xml序列化,DataContractSerializer和LINQ to XML来序列化简单对象树?

.net – 如何选择Xml序列化,DataContractSerializer和LINQ to XML来序列化简单对象树?

我需要将一个简单对象树序列化为 XML文件 – 自从我上次不得不这样做以来世界发生了变化……

(我不关心XML的架构,如果需要,支持人员可以理解该文件)

那么在.net中选择不同的“easy xml”API时要考虑的权衡是什么?

解决方法

这就是我如何考虑选项:

LINQ to XML – 完全控制XML和对象的设计,是3个选项中任意一个的最多代码.

DataContractSerializer – 很少或没有对XML的控制,可以处理大多数对象

XmlSerializer – 完全控制XML,但您必须以Xml序列化喜欢的方式设计对象.

.NET: Xml.Serialization常用对象导图

.NET: Xml.Serialization常用对象导图

.NET框架中,System.Xml.Serialization 命名空间包含着用来将对象序列化为XML的文本或流的对象。

现先上传几个常用的序列化对象导图:

导图下载地址:
http://download.csdn.net/detail/daigualu/9776721

c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性

c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性

.net core 也是够奇葩的,去掉了原先许多using System.Xml.Serialization中的接口又以打包的方式提供真没话讲了。 代码:

// [XmlRoot("DeleteResult")]和[XmlElement("Deleted")],.net core中引用`System.Xml.Serialization`是没有提供的这种方法的,你需要安装依赖包System.Xml.XmlSerializer就可以了。
    [XmlRoot("DeleteResult")]
    public class DeleteObjectsResult : GenericResult
    {
        private DeletedObject[] _keys;

        [XmlElement("Deleted")]
        public DeletedObject[] Keys 
        {
            get
            {
                if (EncodingType == null)
                    return _keys;

                bool isUrlEncoding = EncodingType.ToLowerInvariant().Equals(HttpUtils.UrlEncodingType);
                foreach (var key in _keys)
                {
                    key.Key = isUrlEncoding ? HttpUtils.DecodeUri(key.Key) : key.Key;
                }
                return _keys;
            }
            set
            {
                this._keys = value;
            }
        }

关于c# – XML序列化 – XmlCDataSection为Serialization.XmlTextc# xml序列化 不应该有xmlxn的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.net – NonSerialized和Xml.Serialization.XmlIgnore之间的区别?、.net – 如何选择Xml序列化,DataContractSerializer和LINQ to XML来序列化简单对象树?、.NET: Xml.Serialization常用对象导图、c# .net core System.Xml.Serialization 需使用包 System.Xml.XmlSerializer补齐属性的相关知识,请在本站寻找。

本文标签: