C# 将对象直接序列化为CData

C# 将对象直接序列化为CData,c#,.net,xml,C#,.net,Xml,我需要制作一个api,其中请求主体中需要有一个CData对象。除了我不知道如何将我的对象序列化为CData对象之外,所有的工作都可以完成。该项目是在.net framework中编写的 我目前有以下代码 C#: xml需要如何处理: 007 约翰 ]]> 我可以通过向此函数发出请求,使其正常序列化: public static string SerializeObject<T>(this T toSerialize) { XmlSerializer xmlSerializ

我需要制作一个api,其中请求主体中需要有一个
CData
对象。除了我不知道如何将我的对象序列化为
CData
对象之外,所有的工作都可以完成。该项目是在.net framework中编写的

我目前有以下代码

C#:

xml需要如何处理:


007
约翰
]]>
我可以通过向此函数发出请求,使其正常序列化:

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());

    using (StringWriter textWriter = new StringWriter())
    {
        xmlSerializer.Serialize(textWriter, toSerialize);
        return textWriter.ToString();
    }
}
公共静态字符串序列化对象(此T序列化)
{
XmlSerializer XmlSerializer=新的XmlSerializer(toSerialize.GetType());
使用(StringWriter textWriter=new StringWriter())
{
序列化(textWriter,toSerialize);
返回textWriter.ToString();
}
}
而不是手动添加周围的
CData
部分

然而,我的老板希望它在不手动添加部件的情况下工作

请注意,我对C#很陌生

朝着正确方向迈出的任何一步都会有所帮助。谢谢

尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            CDataSet data = new CDataSet()
            {
                data = new DATA() { ID = "007", NAME = "John" }
            };
            MemoryStream stream = new MemoryStream();
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create(stream, settings);
            XmlSerializer serializer = new XmlSerializer(typeof(CDataSet));
            serializer.Serialize(writer, data);
            writer.Flush();
            writer.Close();
            stream.Position = 0;
            byte[] buffer = new byte[stream.Length];
            stream.Read(buffer, 0, (int)stream.Length);
            string xml = Encoding.UTF8.GetString(buffer);
            string output = string.Format("<![CDATA[\n{0}\n]]>", xml);

        }
    }
    [XmlRoot(ElementName = "DATA", Namespace = "")]
    public class DATA
    {
        private int _ID { get; set; }
        [XmlElement(ElementName = "ID")]
        public string ID {
            get { return _ID.ToString("D3");}
            set{  _ID = int.Parse(value);}
        }
        [XmlElement(ElementName = "NAME")]
        public string NAME { get; set; }
    }

    [XmlRoot(ElementName = "NewDataSet")]
    public class CDataSet
    {
        [XmlElement(ElementName = "DATA")]
        public DATA data { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
使用System.IO;
命名空间控制台应用程序8
{
班级计划
{
静态void Main(字符串[]参数)
{
CDATA集数据=新的CDATA集()
{
data=newdata(){ID=“007”,NAME=“John”}
};
MemoryStream stream=新的MemoryStream();
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
XmlWriter=XmlWriter.Create(流、设置);
XmlSerializer serializer=新的XmlSerializer(类型(CDATA集));
序列化程序。序列化(写入程序、数据);
writer.Flush();
writer.Close();
流位置=0;
byte[]buffer=新字节[stream.Length];
读取(缓冲区,0,(int)stream.Length);
stringxml=Encoding.UTF8.GetString(缓冲区);
字符串输出=string.Format(“,xml);
}
}
[XmlRoot(ElementName=“DATA”,Namespace=”“)]
公共类数据
{
私有int_ID{get;set;}
[xmlement(ElementName=“ID”)]
公共字符串ID{
获取{return _ID.ToString(“D3”);}
集合{u ID=int.Parse(value);}
}
[xmlement(ElementName=“NAME”)]
公共字符串名称{get;set;}
}
[XmlRoot(ElementName=“NewDataSet”)]
公共类CDATA集
{
[xmlement(ElementName=“DATA”)]
公共数据数据{get;set;}
}
}

那么,我们应该做您阅读手册的工作?请注意,odata没有使用XML。它是基于Json的。从阅读开始-C#和。。。奥达塔规范。使用odata客户端框架,因为手动处理它是一件痛苦的事情。当您使用toolkit时,CDATA不能是xml的根元素。它必须嵌套在另一个元素中。如果尚未解决问题,请通知我们。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            CDataSet data = new CDataSet()
            {
                data = new DATA() { ID = "007", NAME = "John" }
            };
            MemoryStream stream = new MemoryStream();
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create(stream, settings);
            XmlSerializer serializer = new XmlSerializer(typeof(CDataSet));
            serializer.Serialize(writer, data);
            writer.Flush();
            writer.Close();
            stream.Position = 0;
            byte[] buffer = new byte[stream.Length];
            stream.Read(buffer, 0, (int)stream.Length);
            string xml = Encoding.UTF8.GetString(buffer);
            string output = string.Format("<![CDATA[\n{0}\n]]>", xml);

        }
    }
    [XmlRoot(ElementName = "DATA", Namespace = "")]
    public class DATA
    {
        private int _ID { get; set; }
        [XmlElement(ElementName = "ID")]
        public string ID {
            get { return _ID.ToString("D3");}
            set{  _ID = int.Parse(value);}
        }
        [XmlElement(ElementName = "NAME")]
        public string NAME { get; set; }
    }

    [XmlRoot(ElementName = "NewDataSet")]
    public class CDataSet
    {
        [XmlElement(ElementName = "DATA")]
        public DATA data { get; set; }
    }
}