Xml_转成对象后然后进行获取

224 篇文章 3 订阅
13 篇文章 0 订阅
<?xml version="1.0" encoding="UTF-8"?>
<!-- xml提示:禁止添加任何@或者#的字符 -->
<VR>
  <UserId txt_s="用户的Id">01</UserId>
  <ProjectId txt_s="工程项目的名称编号Id_需要具有唯一性">01</ProjectId>
  <ProjectTitle txt_s="工程项目的名称_Title信息">01</ProjectTitle>
  <!-- 企业类别名称(汉子),企业类别对应的文件夹名称(为拼音或数字) -->
  <ProjectObject txt_s="企业类别对象" ProjectName="企业类别" ProjectPL="kuka">
  </ProjectObject>
  <SceneDB>
    <!-- 全景图片名称(时间数字类型全景图名称例如:20180303132846)
当前全景图的场景名称 
全景场景的展示排列顺序(从0 开始,包含0)
全景场景展示的第一个场景 -->
    <Img ImgBitId="1.jpg" ImgSceneName="儿童房上下床" LookOrder="1" LookOrderOne="false">
    </Img>
    <Img ImgBitId="2.jpg" ImgSceneName="儿童房" LookOrder="2" LookOrderOne="true">
    </Img>
    <Img ImgBitId="3.jpg" ImgSceneName="衣柜间" LookOrder="3" LookOrderOne="false">
    </Img>
    <Img ImgBitId="4.jpg" ImgSceneName="客厅" LookOrder="4" LookOrderOne="false">
    </Img>
    <Img ImgBitId="5.jpg" ImgSceneName="书房" LookOrder="5" LookOrderOne="false">
    </Img>
    <Img ImgBitId="6.jpg" ImgSceneName="小客厅" LookOrder="6" LookOrderOne="false">
    </Img>
  </SceneDB>
  <SandTableIndex SandTable="ditu.jpg" >
    <!-- 沙盘坐标,1个场景对于1个点,可以没有不可以多于1个,距离左上角坐标,和属于那张图片的 -->
    <Spot X="41" Y="63" LookOrderImg="1.jpg">
    </Spot>
    <Spot X="89" Y="163" LookOrderImg="2.jpg">
    </Spot>
    <Spot X="129" Y="253" LookOrderImg="3.jpg">
    </Spot>
    <Spot X="230" Y="250" LookOrderImg="4.jpg">
    </Spot>
    <Spot X="229" Y="227" LookOrderImg="5.jpg">
    </Spot>
    <Spot X="230" Y="143" LookOrderImg="6.jpg">
    </Spot>
  </SandTableIndex>
  <SceneHotspot>
    <!-- name 是热点的个数 title 是属于那个场景的 ath atv linkedscene 要跳转的地址 text 当前的跳转场景名称 -->
    <Hotspot name="spot0" currentscene="1" ath="-79.05696003981" atv="4.66525107322491" linkedscene="0" text="儿童房上下床" />
    <Hotspot name="spot1" currentscene="1" ath="-63.9108415937361" atv="0.241115507440341" linkedscene="1" text="儿童房" />
    <Hotspot name="spot2" currentscene="1" ath="-58.8836107948887" atv="0.151810970747221" linkedscene="2" text="衣柜间" />
    <Hotspot name="spot3" currentscene="2" ath="-143.145833010596" atv="3.50891279699468" linkedscene="3" text="客厅" />
  </SceneHotspot>
  <DesignerDB DesignerName="天海明王" DesignerNickName="迷离少卿将军" DesignerPhone="110" DesignerIntroduce="我是设计师" IntroduceTopImg="001.jpg" DesignerWCSingImg="WCSin_01.jpg" DesignerWCMoneyImg="money.jpg">
    <!--  1 设计师名称 2 设计师昵称 3 设计师电话 4设计师简介 5 设计师个人头像 6 设计师个人二维码 7设计师收钱二维码-->
  </DesignerDB>
  <HouseImgDrawing>
    <!-- 1户型图名称(数字类型的图片名称)2户型图的宽和高的尺寸(例如300*200)3户型图的时间 标识可以进行更替更具时间 -->
    <HouseImg HouseName="20180303132846.jpg" Width="200" Height="200" CreateTime="20180303132846">
    </HouseImg>
  </HouseImgDrawing>
</VR>

然后进行转换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.IO.Compression;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using System.Drawing;
using System.Text.RegularExpressions;

namespace VR720_WinF_Duo_Service.Models
{
    public class CheckComPres
    {
        /// <summary>
        /// 任务核心 检查
        /// </summary>
        /// <param name="Id">任务号(例如:001 需要具有唯一性)</param>
        /// <param name="Url">文件检查地址(例如:D:\ Wang\VR720_Pite)</param>
        /// <param name="Name">压缩文件名称(例如:VR001.zip)</param>
        /// <param name="Tooken">Tooken</param>
        /// <returns></returns>
        public static IEnumerable<Models.Prompt> GetDB(string Id, string Url, string Name, string Tooken)
        {
            Models.Journal.WiteJournal("开始文件资源检查:Id:" + Id + "Url:" + Url + "Name:" + Name + "Tooken:" + Tooken);
            bool CheTookens = VR720Bll.TookenService.SelectTooken(Tooken);
            if (CheTookens)
            {
                #region 检查数据
                if (Directory.Exists(Url))
                {
                    #region 检查压缩文件
                    if (File.Exists(Url + "\\" + Name))
                    {
                        //文件存在 ,开始解压
                        //首先获得地址解压文件地址原地址
                        string unZipDirectory = System.Configuration.ConfigurationManager.ConnectionStrings["FileZipUrl"].ToString();
                        string CreateZipUrl = unZipDirectory + "\\" + Id;//生成的指定位置为指定文件+任务号
                        string VRDBUrl = CreateZipUrl + "\\VRDB.txt";//检出数据
                        string VRDBLogoUrl = CreateZipUrl + "\\logo.png";// logo 地址

                        //文件解压
                        UnZipClass.UnZip(Url + "\\" + Name, CreateZipUrl);
                        //进行拆分数据 找出对应的文件 -- 进行转成object对象
                        string DBData = XmlUtility.GetXmlJson(VRDBUrl);
                        //  开始转换
                        JObject ObjDBData = JObject.Parse(DBData);

                        #region  获得相关的图片数据信息
                        string ImgData = ObjDBData["VR"]["SceneDB"]["Img"].ToString();
                        string ProjectId = ObjDBData["VR"]["ProjectId"]["value"].ToString(); // 参数 id
                        string qytype = ObjDBData["VR"]["ProjectObject"]["ProjectPL"].ToString();// 企业类别
                        #region 进行判断企业文件名称
                        bool CheckQyType = VR720Bll.SceneService.HasChinese(qytype);
                        if (CheckQyType)
                        {
                            Models.Journal.WiteJournal("企业类别包含数字" + qytype);
                            return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "11", Data = "企业类别为汉子" } };
                        }
                        else
                        {
                            // 如果是非汉子创建文件 FacType
                            #region 创建logo文件夹
                            string CreateFaceType = VR720Bll.SceneService.CreateFacType(qytype, VRDBLogoUrl);
                            if (CreateFaceType == "0")
                            {

                            }
                            else if (CreateFaceType == "1")
                            {
                                //logo 不存在
                                Models.Journal.WiteJournal("logo不存在" + Id);
                                return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "12", Data = "logo.png不存在" } };
                            }
                            else if (CreateFaceType == "2")
                            {
                                Models.Journal.WiteJournal("logo拷贝错误" + Id);
                                return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "13", Data = "logo.png拷贝出现错误,请重试" } };
                            }
                            #endregion

                        }
                        #endregion
                        if (Id != ProjectId)
                        {
                            Models.Journal.WiteJournal("工程项目编号不一致" + Id);
                            return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "10", Data = "工程项目编号不一致" } };
                        }
                        else
                        {
                            Object ImgObjData = new Object();
                            ImgObjData = JsonConvert.DeserializeObject(ImgData, ImgObjData.GetType()); // Object 对象
                            Object Img2Obj = JsonConvert.DeserializeObject(ImgData);//obj   转换json格式的字符串为obj对象
                            #region 数据对象的转换
                            var ImgObjDataDB = new[]{
                                new {ImgBitId ="",ImgSceneName= "",ImgSceneX = "",ImgSceneY = "",ImgSceneZ = "",ImgSceneHole = "",LookOrder = "",LookOrderOne = "",ImgBase64 ="",ProjectId ="" }
                            };




                            ImgObjDataDB = JsonConvert.DeserializeAnonymousType(ImgData, ImgObjDataDB); // 在这里转为对象
                            #endregion

                            #region 判断是否存在的 判断是第一次请求环视非第一次请求
                            bool CheckProjectId = false; //
                            CheckProjectId = VR720Bll.SceneService.CheckProject(ProjectId);

                            #endregion
                            #region 循环数据信息
                            if (CheckProjectId == false)
                            {
                                foreach (var item in ImgObjDataDB)
                                {
                                    #region 开始进行图片的base64 计划
                                    //  根据a 进行循环
                                    try
                                    {

                                        string Imagefilename = CreateZipUrl + "\\" + item.ImgBitId + ".jpg";
                                        using (Bitmap bmp = new Bitmap(Imagefilename))
                                        {
                                            MemoryStream ms = new MemoryStream();
                                            bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                                            byte[] arr = new byte[ms.Length];
                                            ms.Position = 0;
                                            ms.Read(arr, 0, (int)ms.Length);
                                            ms.Close();
                                            string base1 = "data:image/jpeg;base64," + Convert.ToBase64String(arr);
                                            #region 进行数据的插入
                                            VR720Bll.SceneService.AddScene(item.ImgBitId, item.ImgSceneName, item.ImgSceneX, item.ImgSceneY, item.ImgSceneZ, item.ImgSceneHole, item.LookOrder, item.LookOrderOne, base1, ProjectId);
                                            #endregion
                                        }




                                    }
                                    catch (Exception)
                                    {

                                    }

                                    #endregion
                                }
                            }
                            #endregion
                            #region 请求生成密钥 配合ProjectId工程项目id 时间 Tooken
                            string HKey = VR720Bll.SceneService.AddHideKey(ProjectId, Tooken);
                            if (HKey == "")
                            {
                                return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "5" } };
                            }
                            else
                            {
                                //返回地址和密钥

                                return VR720Bll.SceneService.GetUrl(HKey, qytype);
                            }
                            #endregion
                        }

                        #endregion



                    }
                    else
                    {
                        Models.Journal.WiteJournal("请求的压缩文件不存在" + Url);
                        return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "4" } };
                    }


                    #endregion
                }
                else
                {
                    Models.Journal.WiteJournal("请求文件地址不存在" + Url);
                    Models.Journal.WiteJournal("开始文件资源检查结束");
                    //文件夹不存在
                    return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "3" } };
                }

                #endregion
            }
            else { return new List<Models.Prompt>() { new Models.Prompt { Start = false, StartErr = "6" } }; }


        }




    }
    public class JsonP
    {
        public static JObject JsonToString(Object obj, string key)
        {
            try
            {
                List<string> JobList = new List<string>();
                JObject jo = (JObject)JsonConvert.DeserializeObject(obj.ToString());
                //foreach (var item in jo)
                //{

                //}
                return jo;
            }
            catch (Exception)
            {

                throw;
            }
        }
        public static string CheckKey(JObject obj, string key)
        {
            Type type = obj.GetType();
            return "";

        }
    }
    /// <summary>  
    /// 功能:解压文件  
    /// creator chaodongwang 2009-11-11  
    /// </summary>  
    public class UnZipClass
    {
        /// <summary>  
        /// 功能:解压zip格式的文件。  
        /// </summary>  
        /// <param name="zipFilePath">压缩文件路径</param>  
        /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>  
        /// <param name="err">出错信息</param>  
        /// <returns>解压是否成功</returns>  
        public static void UnZip(string zipFilePath, string unZipDir)
        {
            Models.Journal.WiteJournal("解压开始");

            if (zipFilePath == string.Empty)
            {
                throw new Exception("压缩文件不能为空!");
            }
            if (!File.Exists(zipFilePath))
            {
                throw new System.IO.FileNotFoundException("压缩文件不存在!");
            }
            //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹  
            if (unZipDir == string.Empty)
                unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
            if (!unZipDir.EndsWith("/"))
                unZipDir += "/";
            if (!Directory.Exists(unZipDir))
                Directory.CreateDirectory(unZipDir);

            using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
            {

                ZipEntry theEntry;

                while ((theEntry = s.GetNextEntry()) != null)
                {
                    string directoryName = Path.GetDirectoryName(theEntry.Name);
                    string fileName = Path.GetFileName(theEntry.Name);
                    if (directoryName.Length > 0)
                    {
                        Directory.CreateDirectory(unZipDir + directoryName);
                    }
                    if (!directoryName.EndsWith("/"))
                        directoryName += "/";
                    if (fileName != String.Empty)
                    {
                        using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
                        {

                            int size = 2048;
                            byte[] data = new byte[2048];
                            while (true)
                            {
                                size = s.Read(data, 0, data.Length);
                                if (size > 0)
                                {
                                    streamWriter.Write(data, 0, size);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            Models.Journal.WiteJournal("解压结束");
        }

        #region 解压缩包(将压缩包解压到指定目录)
        /// <summary>
        /// 解压缩包(将压缩包解压到指定目录)
        /// </summary>
        /// <param name="zipedFileName">压缩包名称</param>
        /// <param name="unZipDirectory">解压缩目录</param>
        /// <param name="password">密码</param>
        public static void UnZipFiles(string zipedFileName, string unZipDirectory, string password)
        {
            using (ZipInputStream zis = new ZipInputStream(File.Open(zipedFileName, FileMode.OpenOrCreate)))
            {
                if (!string.IsNullOrEmpty(password))
                {
                    zis.Password = password;//有加密文件的,可以设置密码解压
                }

                ZipEntry zipEntry;
                while ((zipEntry = zis.GetNextEntry()) != null)
                {
                    string directoryName = Path.GetDirectoryName(unZipDirectory);
                    string pathName = Path.GetDirectoryName(zipEntry.Name);
                    string fileName = Path.GetFileName(zipEntry.Name);

                    pathName = pathName.Replace(".", "$");
                    directoryName += "\\" + pathName;

                    if (!Directory.Exists(directoryName))
                    {
                        Directory.CreateDirectory(directoryName);
                    }

                    if (!string.IsNullOrEmpty(fileName))
                    {
                        FileStream fs = File.Create(Path.Combine(directoryName, fileName));
                        int size = 2048;
                        byte[] bytes = new byte[2048];
                        while (true)
                        {
                            size = zis.Read(bytes, 0, bytes.Length);
                            if (size > 0)
                            {
                                fs.Write(bytes, 0, size);
                            }
                            else
                            {
                                break;
                            }
                        }
                        fs.Close();
                    }
                }
            }
        }
        #endregion
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值