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转换的更多相关文章

  1. 转 JSON与XML转换

    这两天处理模块的联调工作,在json与XML转换中出现了一些奇怪的问题,仔细究来,实为对org.json.*包知之太少.晚上baidu.google一下,找出了问题出现的原因.在模块中,使用了两个方法 ...

  2. jsonUtils&&Json、Xml转换工具Jackson使用

    1.jsonUtils package com.icil.utils; import java.util.List; import com.fasterxml.jackson.core.JsonPro ...

  3. Java对象、Json、Xml转换工具Jackson使用

    在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...

  4. JSON-lib框架,转换JSON、XML不再困难

    Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...

  5. Jackson 框架JSON、XML、List、Map直接相互转换

    博客分类: json   参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 在其基础上做了稍微调整 详情见附件 jacks ...

  6. SpringMVC关于json、xml自动转换的原理研究[附带源码分析]

    目录 前言 现象 源码分析 实例讲解 关于配置 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.c ...

  7. 如何在ASP.NET中用C#将XML转换成JSON

    本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方式来 ...

  8. SpringMVC关于json、xml自动转换的原理研究

    SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC ...

  9. SpringMVC关于json、xml自动转换的原理研究[附带源码分析 --转

    SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 原文地址:http://www.cnblogs.com/fangjian0423/p/springMVC-xml-json-c ...

随机推荐

  1. 17秋 软件工程 第六次作业 Beta冲刺 Scrum1

    17秋 软件工程 第六次作业 Beta冲刺 Scrum1 各个成员冲刺期间完成的任务 重新梳理项目架构与当前进展,并且对我们的Alpha版本项目进行完整测试,将测试过程中发现的问题列入Github i ...

  2. node爬虫扒小说

    Step 1:  万年不变的初始化项目,安装依赖 cnpm i express cheerio superagent superagent-charset async -S express 就不用多说 ...

  3. ModelForm 中选择框的数据 以及 instance 参数

    ModelForm 中选择框的数据 print(list(self.fields['customer'].choices)) # [('', '---------'), (1, '张飞'), (2, ...

  4. vlookup函数应用

    筛选状态下的复制粘贴 第一步 原数据 第二步 筛选内容 第三步 使用vlookup '=VLOOKUP(A1,$A\(1:\)A$19,1,0)' 第四步 往下拖拉结果 最终结果

  5. Mysql中的锁机制

    原文:http://blog.csdn.net/soonfly/article/details/70238902 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如 ...

  6. PHP获取目录下面所有文件和文件夹

    如果做一个在线的文件管理系统的话,那么首先必须知道怎么读取目录和文件,其实这个功能几行代码就可以实现了. <?php $dir = "D:/";  //要获取的目录 echo ...

  7. xtrabackup 备份和恢复

    该文章接上一篇文章: 内核方面: $ cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) $ uname -r 3.10.0-69 ...

  8. postfix 邮件服务的安装及详解

    该实验系统:cetnos 6.5 sendmail:性能好,设置复杂,适合老手 qmail:体积小260+k ,模块化.需要做二次开发,适合对邮件性能有要求的 postfix:前身是sendmail, ...

  9. MongoDB的数据类型介绍

    参考MongoDB官网:https://docs.mongodb.com/manual/reference/bson-types/ MongoDB文档存储是使用BSON类型,BSON(BSON sho ...

  10. xshell替代工具finalShell

    主要特性:1.多平台支持Windows,Mac OS X,Linux2.多标签,批量服务器管理.3.支持登录Ssh和Windows远程桌面.4.漂亮的平滑字体显示,内置100多个配色方案.5.终端,s ...