直接上代码

using System.Diagnostics;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;
using System.Dynamic;
namespace ConsoleApplication7
{
public class Test
{
public TestDy TestDy { get; set; }
}
public class TestDy : DynamicObject, IXmlSerializable
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name.ToLower();
bool exist = Dict.TryGetValue(name, out result);
if (!exist)
{
// 不存在,默认空
result = null;
}
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
Dict[binder.Name.ToLower()] = value;
return true;
}
Dictionary<string, object> Dict = new Dictionary<string, object>();
public string Sid { get; set; }
public XmlSchema GetSchema()
{
return (null);
}
public void ReadXml(XmlReader reader)
{
Sid = reader.ReadString();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("Sid");
writer.WriteAttributeString("id", Sid.ToString());
foreach (var item in Dict)
{
writer.WriteAttributeString(item.Key, item.Value.ToString());
}
writer.WriteEndElement();
}
}
public class XML
{
public static string XmlSerialize(Type type, object obj)
{
MemoryStream Stream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(type);
try
{
xml.Serialize(Stream, obj);
}
catch (InvalidOperationException)
{
throw;
}
Stream.Position = 0;
StreamReader sr = new StreamReader(Stream);
string str = sr.ReadToEnd();
sr.Dispose();
Stream.Dispose();
return str;
}
public static string SerializeXml(object value)
{
XmlSerializer serializer = new XmlSerializer(value.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.Serialize(ms, value);
ms.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(ms))
{
return sr.ReadToEnd();
}
}
}
public static string XmlSerialize<T>(T obj)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
MemoryStream mem = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serializer.Serialize(writer, obj, ns);
writer.Close();
return Encoding.UTF8.GetString(mem.ToArray());
}
}
public class Program
{
static void Main(string[] args)
{
var test = new Test();
dynamic dy = new TestDy();
test.TestDy = dy;
//dynamic dy = new TestDy();
dy.Sid = "9527";
dy.属性1 = "123";
dy.属性2 = "456";
dy.属性3 ="789";
TextWriter writer = new StreamWriter("C:\\Users\\LYY\\Desktop\\Test.xml");
//string strxml = XML.XmlSerialize(test);
//string strxml = XML.XmlSerialize<Test>(test);
//writer.WriteLine(strxml);
XmlSerializer serializer = new XmlSerializer(test.GetType());
serializer.Serialize(writer,test);
writer.Close();
}
}
}

  

c#序列化基类(包含派生类继承DynamicObject和 IXmlSerializable)对象的更多相关文章

  1. c++ 的类 和 类继承, 什么是c++中的基类和派生类?

    闲云潭影日悠悠,物换星移几度秋 你既然已经做出了选择, 又何必去问为什么选择.鬼谷绝学的要义, 从来都不是回答, 而是抉与择 普通类 #ifndef TABTENN0_H_ #define TABTE ...

  2. 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)

    [源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...

  3. C++学习21 基类和派生类的赋值

    在C/C++中,经常会发生数据类型转换,例如整型数据可以赋值给浮点型变量,在赋值之前,先把整型数据转换为浮点型:反过来,浮点型数据也可以赋值给整型变量. 数据类型转换的前提是,编译器知道如何对数据进行 ...

  4. C++基类和派生类之间的转换

    本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...

  5. Java基类和派生类

    背景:对基类和派生类有更清晰的认识. 从外部看来,派生类是一个与基类具有相同接口的新类,或许还会有一些额外的的方法和域 .但继承并不仅仅是类的复用.当创建了一个派生类的对象时,该类包含了一个基类的子对 ...

  6. OOP1(定义基类和派生类)

    面向对象程序设计基于三个基本概念:数据抽象,继承和动态绑定 数据抽象是一种依赖于接口和实现分离的编程技术.继承和动态绑定对程序的编号有两方面的影响:一是我们可以更容易地定义与其它类相似但不完全相同的类 ...

  7. C++基础之继承类和派生类

    (1)继承是创建一个具有某个类的属性和行为的新类的能力.原有的类称为基类,新创建的类称为派生类.派生类将基类中的所有成员作为自己的成员,同时派生类本身可以定义新的成员(2)派生类只有一个基类的继承称单 ...

  8. C++基类与派生类的转换

    具体表现在以下几个方面: 派生类对象可以向基类对象赋值. 可以用子类(即公用派生类)对象对其基类对象赋值.如    A a1; //定义基类A对象a1    B b1; //定义类A的公用派生类B的对 ...

  9. 详解C++中基类与派生类的转换以及虚基类

    很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中 ...

  10. c++中基类与派生类中隐含的this指针的分析

    先不要看结果,看一下你是否真正了解了this指针? #include<iostream> using namespace std; class Parent{ public: int x; ...

随机推荐

  1. Android中进度条

    <ProgressBar android:id="@+id/progress_bar" android:layout_width="match_parent&quo ...

  2. sql转码

    select               bzj,               sqid,               zcslh,               qymc,               ...

  3. VirtualAlloc加载shellcode免杀一点记录

    一个很好的学习网站 推荐一下: https://docs.microsoft.com/zh-cn/windows/win32/api/ 0x01 VirtualAlloc VirtualAlloc: ...

  4. lisp语法分析与执行分离

    lisp语法分析与执行分离 <sicp>4.1.7节读书笔记 这节中将书中之前实现的解释器做了改进,将语法分析于执行分离.这样做能提高很多效率,比如我们需定义一个过程,然后执行该过程多次. ...

  5. office project visio 2019

    office2019,2016,2013,2010 Visio.Project 各版本下载激活!点我! http://blog.sina.com.cn/s/blog_170abd40a0102yah2 ...

  6. python 图形

    import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt ...

  7. PHP获取远程文件的大小,通过ob_get_contents实现

    function remote_filesize($uri,$user='',$pw='') { ob_start(); $ch = curl_init($uri); curl_setopt($ch, ...

  8. flutte的第一个hello world程序

    用命令行创建项目: flutter create flutterdemo VSCode或者AS连接手机后 输入 flutter run 编译后就可以将默认的代码显示在手机上了 开始写hello wor ...

  9. ModSecurity:一款优秀的开源WAF

    一.ModSecurity3.0介绍 ModSecurity是一个开源的跨平台Web应用程序防火墙(WAF)引擎,用于Apache,IIS和Nginx,由Trustwave的SpiderLabs开发. ...

  10. vs webapi 取消controller

    1.添加引用 using Panda.DynamicWebApi; 2.starup.cs public void ConfigureServices(IServiceCollection servi ...