实体格式化转xml
In the past, I've done the following to control datetime serialization:
- Ignore the DateTime property.
- Create a dummy string property that serializes/deserializes the way I want
Here is an example:
public class SomeClass
{
[XmlIgnore]
public DateTime SomeDate { get; set; }
[XmlElement("SomeDate")]
public string SomeDateString
{
get { return this.SomeDate.ToString("yyyy-MM-dd HH:mm:ss"); }
set { this.SomeDate = DateTime.Parse(value); }
}
}
去掉XML命名空间及声明头不影响反序列化,
直接上代码:
- // 序列化这个对象
- int obj = 1;
- XmlSerializer serializer = new XmlSerializer(obj.GetType());
- // 将对象序列化输出到文件
- FileStream stream = new FileStream("hh.xml", FileMode.Create);
- XmlWriterSettings settings = new XmlWriterSettings();
- settings.Indent = true;
- settings.IndentChars = " ";
- settings.NewLineChars = "\r\n";
- settings.Encoding = Encoding.UTF8;
- //settings.OmitXmlDeclaration = true; // 不生成声明头
- using (XmlWriter xmlWriter = XmlWriter.Create(stream, settings))
- {
- // 强制指定命名空间,覆盖默认的命名空间
- XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
- namespaces.Add(string.Empty, string.Empty);
- serializer.Serialize(xmlWriter, obj, namespaces);
- xmlWriter.Close();
- };
- stream.Close();
这几天碰到一个让人很头疼的问题,写了一个webService,接收一个xml格式的字符串进行解析,
使用如下代码:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString); // 此行错误:根级别上的数据无效。第一行,位置1
意思是xml字符串首行首字符前有不干净的“东西”,调试过程中,未发现有任何字符存在;
于是,把字符串拿去格式化,在项目中新建了一个xml文件,把字符串粘贴进去,发现格式化之后,首行有红色错误提示;把光标移到首行,按了一下Backspace 键,奇怪,红色错误消失了,那说明肯定有不明物体存在;
又于是,修改代码,尝试 xmlString.trim(); 任报错;C 读取XML 错误:根级别上的数据无效。 第 1 行,位置 1 - 坦诚 - 坦诚
仔细思考了一番,猜测估计是编码问题导致,于是乎,对字符串进行编码处理:
xmlString = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(xmlString));
但是任然无效!
后来,网上查了查,因为不知道客户发过来是什么编码格式,那么,就取默认编码,再转换为我想要的utf-8格式吧
Encoding encoding = Encoding.GetEncoding("utf-8");
string xmlString = encoding.GetString(Encoding.Convert(Encoding.Default, encoding, Encoding.Default.GetBytes(xmlString)));
调试发现:编码转换之后的确有效,字符串最前面出现了一个? 号,因为不是xml的标准格式,当然不能通过XmlDocument 加载了。
逼的没办法,只好这么干了:
xmlString.TrimStart("?");
真的成功了,问题暂时得到解决了!!!好高兴啊~ 哈哈哈 C 读取XML 错误:根级别上的数据无效。 第 1 行,位置 1 - 坦诚 - 坦诚
得瑟一天之后,新的问题又来了。。。 C 读取XML 错误:根级别上的数据无效。 第 1 行,位置 1 - 坦诚 - 坦诚
测试站点发布之后,客户调用webservice ,接收到xmlString ,加上上面的代码之后,去掉问号,发现文件中的中文变成乱码了!!!哎呀,我去~ 编码也不对,不编码又不行~~ 这可咋办!!!
后来,通过验证,客户发送出来确实是正常的,还是接收到后处理的问题;
不能进行编码,又要保证能转化成为XmlDocument对象,后来发现XmlDoc对象还有一个方法:
xmlDoc.Load(stream);
既然支持stream的方式读取,那么为何不先转换为stream呢,突然有些窃喜.... C 读取XML 错误:根级别上的数据无效。 第 1 行,位置 1 - 坦诚 - 坦诚 OK!
试一试:
byte[] buffer = encoding.GetBytes(xmlString);
MemoryStream ms = new MemoryStream(buffer);
xmlDoc.Load(ms);
C 读取XML 错误:根级别上的数据无效。 第 1 行,位置 1 - 坦诚 - 坦诚 果不其然,解决了问题!我得意的笑!!!C 读取XML 错误:根级别上的数据无效。 第 1 行,位置 1 - 坦诚 - 坦诚
在这个案例中,肉眼无法在首字符位置发现任何异常,通过trim()、substring() 等方法也都无法发现这个特殊字符,但是XmlDoc 告诉我们确有不明字符,那么,只能是编码的问题了,但是,为什么用stream 就解决这个问题了呢???
问题的根本原因、原理,我就没有再去研究了,如果哪位大侠看到了我的帖子,并且有兴趣,可以共同探讨!
实体格式化转xml的更多相关文章
- C#实体类生成XML与XML Schema文档
一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...
- 简单实体类和xml文件的相互转换
最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...
- 使用C#实现实体类和XML相互转换
一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...
- HTTP 响应实体主体:XML 及 XML parser
本文内容 HTTP 响应实体主体:XML XML parser 总结 各编程语言实现的 XML parser HTTP 响应实体主体:XML 实体主体(entity-body)通常是HTTP响应里 ...
- C#实体类与XML相互转换
1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...
- Linq创建带命名空间、前缀、Soap格式的XML
关于XML,我也是刚接触,关于一般常见的XML,博客园.CSDN上的资料很多,对于不常见的带命名空间.前缀.Soap格式的XML的描述相对来说寥寥无几,上一篇我写到了对相对复杂的XML的读操作,下面说 ...
- Linq解析带命名空间、前缀、Soap格式的XML
关于XML,经常会用到,XML有一般的,同样也有二般的,更不要觉得会操作基础的XML就觉得自己已经精通XML操作,文中是对解析XML的方法进行介绍 1. 一般XML <?xml version= ...
- 利用JAXB实现java实体类和xml互相转换
1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...
- 节点文件将两个不同格式的XML文件,进行节点对照,并生成一个用于对照功能的XML
本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ 经常有的需求是,需要将一种格式的XML转换成另一种XML.如果要实现这个功能首先需要将两个不同XML手动建立节点对比关系.然后 ...
随机推荐
- docker service ps打印出来的错误信息被截断了怎么办?
[解决方法] 用Format属性: 这个其实解决不了截断的问题,不过可以显示更少的列,看起来更清楚. Formatting The formatting options (--format) pr ...
- GLFW_KEY_KP_ADD和GLFW_KEY_KP_SUBTRACT
这两个键的代码分别为: GLFW_KEY_KP_ADD(334) GLFW_KEY_KP_SUBTRACT(333) 对应的是键盘右侧数字面板上的+ -键.
- Solr搭建真实项目
在经过solr5.4.1 quick start 的学习后.我们要搭建真实的项目了 1.启动项目 bin/solr start 2.创建core bin/solr create -c pms 3.为 ...
- [Canvas]更多的球
欲观看动态效果请点此下载代码并用Chrome或者Firefox打开. 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> ...
- 【转】使用 Android 的日志工具LogCat
Android中的日志工具类是 Log(android.util.Log),这个类中提供了如下几个方法来供我们打印日志. 1. Log.v() 这个方法用于打印那些最为琐碎的,意义最小的日志信息 ...
- ZH奶酪:CSS中限制span显示字数
span中的文字是取出于数据库的,不确定文字的个数,由于排版的原因只想让span不超过6个字,如果超过只显示六个,当鼠标悬浮上去的时候tip显示全部内容 Step1.在span中添加title < ...
- 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍
在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...
- MySQL排序:SELECT ORDER BY
SELECT 和ORDER BY结合进行排序: products表例如以下: a 按产品名称列进行排序: b 按多个列进行排序,默认排序顺序为升序: c 指定排序方向,即指定为降序: d 对多个列进行 ...
- Git之第三方托管oschina
一.git 简介 1.Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 2.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. ...
- JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类
public static void main(String[] args) { //长度是2说明是英文/数字/英文状态下的字符,长度为4说明是汉字/中文状态下的字符 String str = &qu ...