c#序列化基类(包含派生类继承DynamicObject和 IXmlSerializable)对象
直接上代码
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)对象的更多相关文章
- c++ 的类 和 类继承, 什么是c++中的基类和派生类?
闲云潭影日悠悠,物换星移几度秋 你既然已经做出了选择, 又何必去问为什么选择.鬼谷绝学的要义, 从来都不是回答, 而是抉与择 普通类 #ifndef TABTENN0_H_ #define TABTE ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- C++学习21 基类和派生类的赋值
在C/C++中,经常会发生数据类型转换,例如整型数据可以赋值给浮点型变量,在赋值之前,先把整型数据转换为浮点型:反过来,浮点型数据也可以赋值给整型变量. 数据类型转换的前提是,编译器知道如何对数据进行 ...
- C++基类和派生类之间的转换
本文讲解内容的前提是派生类继承基类的方式是公有继承,关键字public 以下程序为讲解用例. #include<iostream> using namespace std; class A ...
- Java基类和派生类
背景:对基类和派生类有更清晰的认识. 从外部看来,派生类是一个与基类具有相同接口的新类,或许还会有一些额外的的方法和域 .但继承并不仅仅是类的复用.当创建了一个派生类的对象时,该类包含了一个基类的子对 ...
- OOP1(定义基类和派生类)
面向对象程序设计基于三个基本概念:数据抽象,继承和动态绑定 数据抽象是一种依赖于接口和实现分离的编程技术.继承和动态绑定对程序的编号有两方面的影响:一是我们可以更容易地定义与其它类相似但不完全相同的类 ...
- C++基础之继承类和派生类
(1)继承是创建一个具有某个类的属性和行为的新类的能力.原有的类称为基类,新创建的类称为派生类.派生类将基类中的所有成员作为自己的成员,同时派生类本身可以定义新的成员(2)派生类只有一个基类的继承称单 ...
- C++基类与派生类的转换
具体表现在以下几个方面: 派生类对象可以向基类对象赋值. 可以用子类(即公用派生类)对象对其基类对象赋值.如 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对 ...
- 详解C++中基类与派生类的转换以及虚基类
很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中 ...
- c++中基类与派生类中隐含的this指针的分析
先不要看结果,看一下你是否真正了解了this指针? #include<iostream> using namespace std; class Parent{ public: int x; ...
随机推荐
- Shell编程——脚本编写思路与过程
Linux系统Shell编程——脚本编写思路与过程 “ 前段时间有小伙伴问我一些问题,涉及到shell脚本的编写问题,事后,我深入思考了下,实际生产环境的确也会经常用到,因此如何写这个脚本?它的思路在 ...
- 深入理解volatile原理与使用
volatile:称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的. 可见:一个线程修改了这个变量的值,在另一个线程中能够读取到这个修改后的值. synchronized除了线程之间互 ...
- centos6安装vim插件youcompleteme问题及解决
首先clone vim8代码库 git clone https://github.com/vim/vim.git 然后编译 注意下自己的python2.7config在哪儿 ./configure - ...
- 高通平台打开 dynamic debug方法【学习笔记】
一.首先在内核的配置文件添加如下的配置: CONFIG_DEBUG_FS=y CONFIG_DYNAMIC_DEBUG=y 二.找到自己平台对应的 device/qcom/xxxx/init.targ ...
- 右键查看别人网页的js代码为什么会显示乱码
查看别人网页的js显示乱码 解决方法: 打开浏览器,选择设置,点击更多,选择文字编码为Unicode
- windows powershell学习
PowerShell,从名字可以知道,他首先是一个shell,shell的意思就是和Linux的bash等一样.和原来的cmd一样就是在里边敲命令(可执行文件)使用: 而Power就意味他是一个功能强 ...
- Socket通信(1):搭建开发环境
一. 准备工具 1. mac环境下的VMware Fusion, 下载地址:https://www.newasp.net/soft/462096.html 2. ubuntu 14.04 LTS, 不 ...
- Android页面切换
参考地址: http://www.crifan.com/android_how_to_create_new_ui_and_switch_to_another_new_ui/ 想要实现,在Android ...
- fastjson字段顺序问题
构造函数中指定使用有序 public JSONObject(boolean ordered) { this(16, ordered);} 示例: JSONObject fastJson = new J ...
- phpstorm yii2框架的redis和mongodb提示
随便找个目录创建一个 yii_helper.php 文件,内容如下: /** * Class Yii */ class Yii { /** * @var MyApplication */ public ...