C#JSON与XML转换
C#JSON转XML
输入:[{\'name\': \'yancy\',\'value\': \'0\'},{\'name\': \'jieny\',\'value\': \'1\'}]
string str = "[{\'name\': \'yancy\',\'value\': \'0\'},{\'name\': \'jieny\',\'value\': \'1\'}]";
调用方法:GetCustomItemSpecifics(str)

输出:<?xml version="1.0" encoding="utf-8"?><CustomItemSpecifics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ItemSpecifics><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">yancy</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">0</Value></NameValueListType><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">jieny</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">1</Value></NameValueListType></ItemSpecifics></CustomItemSpecifics>


代码:
GetCustomItemSpecifics
public static string GetCustomItemSpecifics(string str)
{
DataTable dt= JsonConvert.DeserializeObject<DataTable>(str); List<Json2Xml.NameValueListType> nvl = new List<Json2Xml.NameValueListType>(); foreach (DataRow dr in dt.Rows)
{
Json2Xml.NameValueListType nv = new Json2Xml.NameValueListType(); string sName = dr["Name"].ToString();
string sValue = dr["Value"].ToString(); if (sName != string.Empty && sValue != string.Empty)
{
nv.Name = sName;
nv.Value = new string[] { sValue };
nvl.Add(nv);
}
} if (nvl.Count == )
{
return string.Empty;
}
else
{
Json2Xml.CustomItemSpecifics t = new Json2Xml.CustomItemSpecifics();
t.ItemSpecifics = nvl.ToArray();
return Json2Xml.ObjectToText(t, typeof(Json2Xml.CustomItemSpecifics));
}
}
Json2Xml.cs
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization; namespace ConsoleApp1
{
public class Json2Xml
{
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.2612.0")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:ebay:apis:eBLBaseComponents")]
public enum ItemSpecificSourceCodeType
{ /// <remarks/>
ItemSpecific, /// <remarks/>
Attribute, /// <remarks/>
Product, /// <remarks/>
CustomCode,
} [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.2612.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:ebay:apis:eBLBaseComponents")]
public partial class NameValueListType
{ private string nameField; private string[] valueField; private ItemSpecificSourceCodeType sourceField; private bool sourceFieldSpecified; private System.Xml.XmlElement[] anyField; /// <remarks/>
public string Name
{
get
{
return this.nameField;
}
set
{
this.nameField = value;
}
} /// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Value")]
public string[] Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
} /// <remarks/>
public ItemSpecificSourceCodeType Source
{
get
{
return this.sourceField;
}
set
{
this.sourceField = value;
}
} /// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool SourceSpecified
{
get
{
return this.sourceFieldSpecified;
}
set
{
this.sourceFieldSpecified = value;
}
} /// <remarks/>
[System.Xml.Serialization.XmlAnyElementAttribute()]
public System.Xml.XmlElement[] Any
{
get
{
return this.anyField;
}
set
{
this.anyField = value;
}
}
} public class CustomItemSpecifics
{
public NameValueListType[] ItemSpecifics;
} public class Item
{
public string Name { get; set; } public string Value { get; set; } public string[] RecommValues { get; set; } //public void DataTable2Entity(Item item, DataRow dr) {
// item.Name=dr.
//}
} public static string ObjectToText(Object inObject, Type inType)
{
String XmlizedString = null;
MemoryStream ms = new MemoryStream();
XmlSerializer xs = new XmlSerializer(inType);
XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
xs.Serialize(xmlTextWriter, inObject);
ms = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(ms.ToArray()); return XmlizedString;
} private static String UTF8ByteArrayToString(Byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
String constructedString = encoding.GetString(characters); if (constructedString.Length > )
{
constructedString = constructedString.Substring();
}
return (constructedString);
} public static Object TextToObject(string inText, Type inType)
{
try
{
if (string.IsNullOrEmpty(inText))
{
return null;
}
else
{
XmlSerializer xs = new XmlSerializer(inType);
MemoryStream ms = new MemoryStream(StringToUTF8ByteArray(inText));
XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
return (Object)xs.Deserialize(ms);
}
}
catch
{
return null;
}
}
private static byte[] StringToUTF8ByteArray(string inText)
{
UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(inText); return byteArray;
}
}
}
C#XML转JSON
输入:<?xml version="1.0" encoding="utf-8"?><CustomItemSpecifics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ItemSpecifics><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">yancy</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">0</Value></NameValueListType><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">jieny</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">1</Value></NameValueListType></ItemSpecifics></CustomItemSpecifics>
调用方法:XmlToJSON(doc)

输出:{ "CustomItemSpecifics": {"ItemSpecifics": { "NameValueListType": [ {"Name": {"value": "yancy", "xmlns": "urn:ebay:apis:eBLBaseComponents" }, "Value": {"value": "0", "xmlns": "urn:ebay:apis:eBLBaseComponents" } }, {"Name": {"value": "jieny", "xmlns": "urn:ebay:apis:eBLBaseComponents" }, "Value": {"value": "1", "xmlns": "urn:ebay:apis:eBLBaseComponents" } } ] }, "xmlns:xsd": "http:\/\/www.w3.org\/2001\/XMLSchema", "xmlns:xsi": "http:\/\/www.w3.org\/2001\/XMLSchema-instance" }}


代码:
XmlToJSONHelper.cs
using System.Collections;
using System.Text;
using System.Xml; namespace ConsoleApp1
{
public class XmlToJSONHelper
{
public static string XmlToJSON(XmlDocument xmlDoc)
{
StringBuilder sbJSON = new StringBuilder();
sbJSON.Append("{ ");
XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true);
sbJSON.Append("}");
return sbJSON.ToString();
} public static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName)
{
if (showNodeName)
sbJSON.Append("\"" + SafeJSON(node.Name) + "\": ");
sbJSON.Append("{"); SortedList childNodeNames = new SortedList(); if (node.Attributes != null)
foreach (XmlAttribute attr in node.Attributes)
StoreChildNode(childNodeNames, attr.Name, attr.InnerText); foreach (XmlNode cnode in node.ChildNodes)
{
if (cnode is XmlText)
StoreChildNode(childNodeNames, "value", cnode.InnerText);
else if (cnode is XmlElement)
StoreChildNode(childNodeNames, cnode.Name, cnode);
}
foreach (string childname in childNodeNames.Keys)
{
ArrayList alChild = (ArrayList)childNodeNames[childname];
if (alChild.Count == )
OutputNode(childname, alChild[], sbJSON, true);
else
{
sbJSON.Append(" \"" + SafeJSON(childname) + "\": [ ");
foreach (object Child in alChild)
OutputNode(childname, Child, sbJSON, false);
sbJSON.Remove(sbJSON.Length - , );
sbJSON.Append(" ], ");
}
}
sbJSON.Remove(sbJSON.Length - , );
sbJSON.Append(" }");
} public static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue)
{
if (nodeValue is XmlElement)
{
XmlNode cnode = (XmlNode)nodeValue;
if (cnode.Attributes.Count == )
{
XmlNodeList children = cnode.ChildNodes;
if (children.Count == )
nodeValue = null;
else if (children.Count == && (children[] is XmlText))
nodeValue = ((XmlText)(children[])).InnerText;
}
}
object oValuesAL = childNodeNames[nodeName];
ArrayList ValuesAL;
if (oValuesAL == null)
{
ValuesAL = new ArrayList();
childNodeNames[nodeName] = ValuesAL;
}
else
ValuesAL = (ArrayList)oValuesAL;
ValuesAL.Add(nodeValue);
} public static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName)
{
if (alChild == null)
{
if (showNodeName)
sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
sbJSON.Append("null");
}
else if (alChild is string)
{
if (showNodeName)
sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
string sChild = (string)alChild;
sChild = sChild.Trim();
sbJSON.Append("\"" + SafeJSON(sChild) + "\"");
}
else
XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);
sbJSON.Append(", ");
} public static string SafeJSON(string sIn)
{
StringBuilder sbOut = new StringBuilder(sIn.Length);
foreach (char ch in sIn)
{
if (char.IsControl(ch) || ch == '\'')
{
int ich = (int)ch;
sbOut.Append(@"\u" + ich.ToString("x4"));
continue;
}
else if (ch == '\"' || ch == '\\' || ch == '/')
{ sbOut.Append('\\'); } sbOut.Append(ch);
}
return sbOut.ToString();
} public static void StoreChildNode(IDictionary childNodeNames, string nodeName, object nodeValue)
{
ArrayList list2;
if (nodeValue is XmlElement)
{
XmlNode node = (XmlNode)nodeValue;
if (node.Attributes.Count == )
{
XmlNodeList childNodes = node.ChildNodes;
if (childNodes.Count == )
{
nodeValue = null; }
else if ((childNodes.Count == ) && (childNodes[] is XmlText))
{ nodeValue = childNodes[].InnerText; } }
}
object obj2 = childNodeNames[nodeName];
if (obj2 == null)
{
list2 = new ArrayList();
childNodeNames[nodeName] = list2;
}
else
{
list2 = (ArrayList)obj2;
}
list2.Add(nodeValue);
}
}
}
C#JSON与XML转换的更多相关文章
- 转 JSON与XML转换
这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少.晚上baidu.google一下,找出了问题出现的原因.在模块中,使用了两个方法 ...
- jsonUtils&&Json、Xml转换工具Jackson使用
1.jsonUtils package com.icil.utils; import java.util.List; import com.fasterxml.jackson.core.JsonPro ...
- Java对象、Json、Xml转换工具Jackson使用
在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...
- JSON-lib框架,转换JSON、XML不再困难
Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...
- Jackson 框架JSON、XML、List、Map直接相互转换
博客分类: json 参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 在其基础上做了稍微调整 详情见附件 jacks ...
- SpringMVC关于json、xml自动转换的原理研究[附带源码分析]
目录 前言 现象 源码分析 实例讲解 关于配置 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.c ...
- 如何在ASP.NET中用C#将XML转换成JSON
本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方式来 ...
- SpringMVC关于json、xml自动转换的原理研究
SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC ...
- SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转
SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...
随机推荐
- SQL Server2008 4064错误
无法打开用户默认数据库,登录失败,其原因是登录帐户的默认数据库被删除. 解决办法是使用管理员帐户修改此登录帐户的默认数据库. 1.使用管理员帐号登入企业管理器,在"对象资源管理器& ...
- VS Code 快捷键使用小技巧
相关文档 官方文档(英文版):Documentation for Visual Studio Code 中文文档(未完成):GitHub - jeasonstudio/CN-VScode-Docs: ...
- 【TJOJI\HEOI2016】求和
[TJOI/HEOI2016]求和 这题好难啊!! 斯特林数+NTT. 首先我们将第二类斯特林数用容斥展开,具体原理不解释了. \(\displaystyle S(i,j)=\frac{1}{j!}\ ...
- 对node.js的理解?
a.Node.js是一个基于Google Chrome V8引擎的javascript运行环境.Node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量又高效.Node.js的包管理器npm, ...
- spring mvc 中web.xml配置信息解释
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- python中requests已安装却仍报No module named requests错的原因
调用pip list可见已经成功安装了: requests 但是在运行时仍报错: userdeMacBook-Pro:xiaohui user$ python test_web.py Tracebac ...
- call()、delegatecall()
call()当使用方法是:require(msg.sender.call.value(_weiToWithdraw)());则作用是将_weiToWithdraw个以太币发送给msg.sender地址 ...
- sysbench数据库压力测试
sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试 wget https://github.com/akopytov/sysbench/archive/1.0. ...
- 617. Merge Two Binary Trees
https://www.cnblogs.com/grandyang/p/7058935.html class Solution { public: TreeNode* mergeTrees(TreeN ...
- Qt+QGis二次开发:加载栅格图层和矢量图层
一.加载栅格图像 加载栅格图像的详细步骤在下面代码里: //添加栅格数据按钮槽函数 void MainWindow::addRasterlayers() { //步骤1:打开文件选择对话框 QStri ...