我不知道它是否已经得到了回答,但是我运气不好或者因为我的狩猎技术无法在stackoverflow中找到它.请忽略我的垃圾邮件

我们需要编写一个适用于任何提供XML输出的API的API解析器.

我们不会事先知道XML结构.

该解决方案应转换XML文件并将其保存在通用tsql表中,并将XML元素/属性名称作为第一行.

所以基本上它是任何API的XML反序列化器.

我们不能将任何第三方dll用于我们的C#类.

我不知道C#所以不知道它是否可能.但我已经能够使用OPENXML在tsql中编写一个genric XML->行转换器. tsql解决方案的问题是我们无法将巨大的XML文件成功导入数据库.

我可以提供所需的任何细节.请在评论/答案中告诉我.

我不希望任何人为我编写代码,任何合适的指针就足够了

资源:
JSON

[
{
        "id" : 21953,"mainReqIdentity" : "xxxx","itemName" : "xxxx","kanbanPhase" : "xxxx","kanbanStatus" : "xxxx","backlogItemType" : "xxxx","identityDomain" : "xxxx","fromDatetime" : "2016-08-05 17:52:34","teams" : [],"releases" : [{
                "id" : 1229,"release_name" : "xxxx","release_connection_type" : "xxxx"
            }
        ],"fpReleases" : [],"sources" : [{
                "sourceName" : "xxxx","sourceRecordUrl" : "xxxx","sourceRecordIdentity" : "xxxx"
            }
        ],"productNumbers" : [],"tags" : [],"productComponents" : [],"ranPlatforms" : [],"subReleases" : [],"requirementAreaId" : xxxx,"requirementArea" : "xxxx","toBeHandledAtxxxx" : "xxxx"
    },{
        "id" : 22014,"releases" : [{
                "id" : xxxx,"f0Date" : "2015-10-01","f1Date" : "2015-10-01","f2Date" : "2016-02-01","f4Date" : "2016-03-31","fgDate" : "2016-04-29","toBeHandledAtxxxx" : "xxxx"
    }
    ]

XML:2个样本

样品1

<root type="array">
    <id type="number">21286</id>
    <mainReqIdentity type="string">xxxxxx</mainReqIdentity>
    <itemName type="string">xxxxxx</itemName>
    <kanbanPhase type="string">xxxxxx</kanbanPhase>
    <kanbanStatus type="string">xxxxxx</kanbanStatus>
    <kanbanNote type="string">xxxxxx</kanbanNote>
    <backlogItemType type="string">xxxxxx</backlogItemType>
    <identityDomain type="string">xxxxxx</identityDomain>
    <fromDatetime type="string">2016-08-23 17:01:52</fromDatetime>
    <teams type="array">
      <item type="object">
        <team_name type="string">xxxxxx</team_name>
        <preliminary type="boolean">xxxxxx</preliminary>
      </item>
    </teams>
    <releases type="array">
      <item type="object">
        <id type="number">xxxxxx</id>
        <release_name type="string">xxxxxx</release_name>
        <release_connection_type type="string">xxxxxx</release_connection_type>
      </item>
    </releases>
    <fpReleases type="array">
    </fpReleases>
    <sources type="array">
      <item type="object">
        <sourceName type="string">xxxxxx</sourceName>
        <sourceRecordUrl type="string">xxxxxx</sourceRecordUrl>
      </item>
    </sources>
    <productNumbers type="array">
    </productNumbers>
    <tags type="array">
    </tags>
    <productComponents type="array">
    </productComponents>
    <ranPlatforms type="array">
    </ranPlatforms>
    <subReleases type="array">
    </subReleases>
    <requirementAreaId type="number">xxxxxx</requirementAreaId>
    <requirementArea type="string">xxxxxx</requirementArea>
    <itemContact type="string">xxxxxx</itemContact>
    <toBeHandledAtxxx type="string">xxxxxx</toBeHandledAtLuca>
  </item>
    <item type="object">
    <id type="number">xxxxxx</id>
    <mainReqIdentity type="string">xxxxxx</mainReqIdentity>
    <itemName type="string">xxxxxx</itemName>
    <kanbanPhase type="string">xxxxxx</kanbanPhase>
    <kanbanStatus type="string">xxxxxx</kanbanStatus>
    <kanbanNote type="string">xxxxxx</kanbanNote>
    <backlogItemType type="string">xxxxxx</backlogItemType>
    <identityDomain type="string">xxxxxx</identityDomain>
    <fromDatetime type="string">2016-08-23 17:01:52</fromDatetime>
    <teams type="array">
      <item type="object">
        <team_name type="string">xxxxxx</team_name>
        <preliminary type="boolean">xxxxxx</preliminary>
      </item>
    </teams>
    <releases type="array">
      <item type="object">
        <id type="number">xxxxxx</id>
        <release_name type="string">xxxxxx</release_name>
        <release_connection_type type="string">xxxxxx</release_connection_type>
      </item>
    </releases>
    <fpReleases type="array">
    </fpReleases>
    <sources type="array">
      <item type="object">
        <sourceName type="string">xxxxxx</sourceName>
        <sourceRecordUrl type="string">xxxxxx</sourceRecordUrl>
      </item>
    </sources>
    <productNumbers type="array">
    </productNumbers>
    <tags type="array">
    </tags>
    <productComponents type="array">
    </productComponents>
    <ranPlatforms type="array">
    </ranPlatforms>
    <subReleases type="array">
    </subReleases>
    <requirementAreaId type="number">xxxxxx</requirementAreaId>
    <requirementArea type="string">xxxxxx</requirementArea>
    <oaResultReference type="string">xxxxxx</oaResultReference>
    <itemContact type="string">xxxxxx</itemContact>
    <f0Date type="string">2014-10-17</f0Date>
    <f1Date type="string">2015-01-16</f1Date>
    <f2Date type="string">2015-02-13</f2Date>
    <f4Date type="string">2015-06-12</f4Date>
    <faDate type="string">2015-06-12</faDate>
    <fgDate type="string">2015-06-12</fgDate>
    <toBeHandledAtxxx type="string">xxxxxx</toBeHandledAtLuca>
  </item>
 </root>

样本2

<ROOT>  
<Customer CustomerID="VINET" ContactName="Paul Henriot">  
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">  
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>  
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>  
   </Order>  
</Customer>  
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">  
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">  
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>  
   </Order>  
</Customer>  
</ROOT>

sql

通用登台表

create table ZZZZZZZZZ
(
api_id int,record_type char(1),record_id INT,last_run_time datetime,last_run_by varchar(500),col1 VARCHAR(500),col2 VARCHAR(500),col3 VARCHAR(500),col4 VARCHAR(500),col5 VARCHAR(500),col6 VARCHAR(500),col7 VARCHAR(500),col8 VARCHAR(500),col9 VARCHAR(500),col10 VARCHAR(500),col11 VARCHAR(500),col12 VARCHAR(500),col13 VARCHAR(500),col14 VARCHAR(500),col15 VARCHAR(500),col16 VARCHAR(500),col17 VARCHAR(500),col18 VARCHAR(500),col19 VARCHAR(500),col20 VARCHAR(500),col21 VARCHAR(500),col22 VARCHAR(500),col23 VARCHAR(500),col24 VARCHAR(500),col25 VARCHAR(500),col26 VARCHAR(500),col27 VARCHAR(500),col28 VARCHAR(500),col29 VARCHAR(500),col30 VARCHAR(500),col31 VARCHAR(500),col32 VARCHAR(500),col33 VARCHAR(500),col34 VARCHAR(500),col35 VARCHAR(500),col36 VARCHAR(500),col37 VARCHAR(500),col38 VARCHAR(500),col39 VARCHAR(500),col40 VARCHAR(500),col41 VARCHAR(500),col42 VARCHAR(500),col43 VARCHAR(500),col44 VARCHAR(500),col45 VARCHAR(500),col46 VARCHAR(500),col47 VARCHAR(500),col48 VARCHAR(500),col49 VARCHAR(500),col50 VARCHAR(500),col51 VARCHAR(500),col52 VARCHAR(500),col53 VARCHAR(500),col54 VARCHAR(500),col55 VARCHAR(500),col56 VARCHAR(500),col57 VARCHAR(500),col58 VARCHAR(500),col59 VARCHAR(500),col60 VARCHAR(500),col61 VARCHAR(500),col62 VARCHAR(500),col63 VARCHAR(500),col64 VARCHAR(500),col65 VARCHAR(500),col66 VARCHAR(500),col67 VARCHAR(500),col68 VARCHAR(500),col69 VARCHAR(500),col70 VARCHAR(500),col71 VARCHAR(500),col72 VARCHAR(500),col73 VARCHAR(500),col74 VARCHAR(500),col75 VARCHAR(500),col76 VARCHAR(500),col77 VARCHAR(500),col78 VARCHAR(500),col79 VARCHAR(500),col80 VARCHAR(500),col81 VARCHAR(500),col82 VARCHAR(500),col83 VARCHAR(500),col84 VARCHAR(500),col85 VARCHAR(500),col86 VARCHAR(500),col87 VARCHAR(500),col88 VARCHAR(500),col89 VARCHAR(500),col90 VARCHAR(500),col91 VARCHAR(500),col92 VARCHAR(500),col93 VARCHAR(500),col94 VARCHAR(500),col95 VARCHAR(500),col96 VARCHAR(500),col97 VARCHAR(500),col98 VARCHAR(500),col99 VARCHAR(500),col100 VARCHAR(500),col101 VARCHAR(500),col102 VARCHAR(500),col103 VARCHAR(500),col104 VARCHAR(500),col105 VARCHAR(500),col106 VARCHAR(500),col107 VARCHAR(500),col108 VARCHAR(500),col109 VARCHAR(500),col110 VARCHAR(500),col111 VARCHAR(500),col112 VARCHAR(500),col113 VARCHAR(500),col114 VARCHAR(500),col115 VARCHAR(500),col116 VARCHAR(500),col117 VARCHAR(500),col118 VARCHAR(500),col119 VARCHAR(500),col120 VARCHAR(500),col121 VARCHAR(500),col122 VARCHAR(500),col123 VARCHAR(500),col124 VARCHAR(500),col125 VARCHAR(500),col126 VARCHAR(500),col127 VARCHAR(500),col128 VARCHAR(500),col129 VARCHAR(500),col130 VARCHAR(500),col131 VARCHAR(500),col132 VARCHAR(500),col133 VARCHAR(500),col134 VARCHAR(500),col135 VARCHAR(500),col136 VARCHAR(500),col137 VARCHAR(500),col138 VARCHAR(500),col139 VARCHAR(500),col140 VARCHAR(500),col141 VARCHAR(500),col142 VARCHAR(500),col143 VARCHAR(500),col144 VARCHAR(500),col145 VARCHAR(500),col146 VARCHAR(500),col147 VARCHAR(500),col148 VARCHAR(500),col149 VARCHAR(500),col150 VARCHAR(500)
)

样本输出

用Tsql编写的通用XML解析器.代码中有很少的hacks和一些需要删除的杂散代码.这很好用.但问题是通过直接调用或通过文件从C#代码发送整个XML文档作为输入参数.

CREATE PROC ZZZZZZZ
(
@in_api_id int,@in_xml_doc XML,@in_xml_root varchar(100),@in_tot_result_col int = 150,@in_need_colnm_result CHAR(1) = 'Y',@in_debug_flg CHAR(1) = 'N'
)
AS
BEGIN
DECLARE 
    @idoc int,@sqlstr nvarchar(max) = '',@param nvarchar(200) = '',@runtime datetime = getdate(),@runby varchar(30) = suser_name(),@cnt int,@pre_stg_col_nm varchar(max) = '',@max_lvl int,@max_node varchar(500)='',@max_node_wo_slash varchar(500)='',@xml_col nvarchar(max) = '',@unq_col nvarchar(max) = '',@unq_xml_col nvarchar(max)=''

--Create an internal representation of the XML document.  
EXEC sp_xml_preparedocument @idoc OUTPUT,@in_xml_doc;  
-- Execute a SELECT statement that uses the OPENXML rowset provider.  
set @in_xml_root = concat('/',@in_xml_root)
SELECT * into #tmp FROM OPENXML (@idoc,@in_xml_root,2) where id <> 0;

--select * from #tmp_xml_nodes
--select * from #tmp
--select * from #tmp_pre_staging

;with xml_cte(id,parentid,nodetype,localname,prefix,namespaceuri,datatype,prev,text,lvl,node,parent_localname)
AS
(
select  id,1 as lvl,cast(CONCAT(@in_xml_root,'/',localname) as varchar(100)) node,cast('' as varchar(200))
from #tmp
where parentid = 0
UNION all
select  t.id,t.parentid,t.nodetype,t.localname,t.prefix,t.namespaceuri,t.datatype,t.prev,t.text,iif(t.nodetype = 1,xc.lvl+1,xc.lvl),cast(
                        CONCAT (
                                        xc.node,CONCAT (
                                                            '/',t.localname
                                                            ),''
                                                )
                                        ) AS VARCHAR(100)
                            ),cast(xc.localname as varchar(200))
from #tmp t
inner join xml_cte xc
on xc.id = t.parentid
)
select * into #xmlcte from xml_cte

--select * from #xmlcte
--v2 change
select @max_lvl = max(lvl)--iif(max(lvl)>=4,1,0) -- the iif condition is just a hack,I dont kNow why it works
from #xmlcte 

select 
    @max_node = concat(max(node),'/'),@max_node_wo_slash = max(node) 
from #xmlcte 
where lvl = @max_lvl

select *,concat(parent_localname,'_',' varchar(500)') fnl_col_nm,case 
                                when lvl<@max_lvl then concat(replicate('../',@max_lvl-lvl+iif(nodetype=1,0)),iif(nodetype=1,'','@'),localname) --v2 change
                                when lvl>@max_lvl then concat(replace(node,@max_node,''),'/@'),localname)--v2 change
                                else concat('../','/@')),localname)--v2 change
                                end col_Struct,localname) col_unq_nm,ROW_NUMBER() over (order by(select 100)) sno,concat('xmlname.value(''/Names[1]/name[',ROW_NUMBER() over (order by(select 100)),']'',''varchar(500)'') AS ',localname)) col_splt_nm
into #xml_col_struct
from #xmlcte
where nodetype <= 2--v2 change

--select * from #xml_col_struct
set @cnt = (select count(distinct col_unq_nm) from #xml_col_struct)

select @pre_stg_col_nm =
(
select concat(',',COLUMN_NAME)
from informatION_SCHEMA.COLUMNS
where table_name = 'ZZZZZZ'
and COLUMN_NAME like 'col%'
and ORDINAL_POSITION <= @cnt+5
order by ORDINAL_POSITION
for xml path('')
)

set @sqlstr = concat(
                                        'insert into ZZZZZ(api_id,record_type,record_id,last_run_time,last_run_by',@pre_stg_col_nm,')'
                                        )
select @xml_col =
(
select distinct concat(',fnl_col_nm,' ''',col_Struct,'''',char(10)) 
from #xml_col_struct
order by 1
for xml path('')
)
set @xml_col = stuff(@xml_col,'')

select @unq_col =
(
select distinct concat(',col_unq_nm )
from #xml_col_struct
order by 1
for xml path('')
)
set @unq_col = stuff(@unq_col,'')

select @in_tot_result_col = @in_tot_result_col - count(distinct col_unq_nm)
from #xml_col_struct

select @unq_xml_col =
(
select 
concat(',xmlname.value(''/Names[1]/name[',col_unq_nm,char(10))
from (select distinct col_unq_nm from #xml_col_struct) t
for xml path('')
)
set @unq_xml_col = stuff(@unq_xml_col,'')

set @sqlstr =
                        concat(
                                    iif(@in_need_colnm_result = 'Y',concat('
                                                ;WITH Split_Names (xmlname)
                                                AS
                                                (
                                                        SELECT 
                                                        CONVERT(XML,''<Names><name>''  
                                                        + REPLACE(''',@unq_col,''',''</name><name>'') + ''</name></Names>'') AS xmlname
                                                )
                                                '
                                                --,@sqlstr,char(10),' SELECT ',@in_api_id,''H'',@runtime,@runby,@unq_xml_col,replicate(',NULL',@in_tot_result_col)--v2 change,'FROM Split_Names','union all'
                                                ),''
                                        )
                                    --,iif(@in_need_colnm_result = 'Y',@sqlstr),'
                                    SELECT ',''D'',*','FROM   OPENXML (@idoc_inn,@max_node_wo_slash,2)','WITH (',@xml_col,')'
                                    )

if @in_debug_flg = 'Y'
    begin
        select @max_lvl+1,@max_lvl,@unq_xml_col
        select * from #xml_col_struct--v2 change
    end
else
    begin
        set @param = '@idoc_inn int'
        exec sys.sp_executesql @sqlstr,@param,@idoc_inn = @idoc
    end
EXEC sp_xml_removedocument @idoc

END

用于读取C#类加载的XML文件的sql代码.这也很好,但问题是所有行都在单独的行中,并且连接在一个点后截断

create table #tmp(data_line nvarchar(max))

bulk insert #tmp
FROM '\\Server\\ZZZZ\\Downloads\\Data.xml'  
   WITH   
      ( 
                --firstrow = 1          
                 ROWTERMINATOR ='\n'  
      );  

select * from #tmp

C#类

Object httpConn = Dts.Connections["HTTP"].AcquireConnection(null);
        HttpClientConnection myConnection = new HttpClientConnection(httpConn);
        myConnection.ServerURL = string.Format(("http://xxxx.com/jjjj"),"userid","password");
        byte[] webdata = myConnection.DownloadData();

        String result_data = Convert.ToBase64String(webdata);
        XmlDocument xd = new XmlDocument();
        XmlDictionaryReader xr = JsonReaderWriterFactory.CreateJsonReader(webdata,XmlDictionaryReaderQuotas.Max);

        xr.Read();
        xd.LoadXml(xr.ReadOuterXml());
        xd.Save("\\Server\\ZZZZ\\Downloads\\Data.xml");

解决方法

如果您获得格式正确的XML.您可以使用数据集.具体使用Dataset.readxml().这将在数​​据集对象中加载xml,而与xml标记无关.然后,您可以使用ADO.Net,linq2sql,EF或任何其他通信方法将其放入数据库中.

由于您在服务器上保存文件,因此可以使用以下代码:

DataSet ds = new DataSet();
ds.readxml("\\Server\\ZZZZ\\Downloads\\Data.xml");

然后你可以使用foreach循环迭代每个数据集表. xml中的属性将成为数据表中的列.

所以你的最终代码将类似于:

using (DataSet ds = new DataSet())
{
     ds.readxml("\\Server\\ZZZZ\\Downloads\\Data.xml");
     int nTableCounts = ds.Tables.Count;
     foreach(DataTable dt in ds.Tables)
     {
          using (dt)
          {
            //Put data in sql table.
          }
     }
}

如果有什么不清楚,请告诉我.

c# – 将XML数据转换为tsql记录以获取任何XML响应的更多相关文章

  1. HTML5 WebSocket实现点对点聊天的示例代码

    这篇文章主要介绍了HTML5 WebSocket实现点对点聊天的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

  3. ios – 在Swift中将输入字段字符串转换为Int

    所以我非常擅长制作APP广告Swift,我试图在文本字段中做一些非常简单的输入,取值,然后将它们用作Int进行某些计算.但是’vardistance’有些东西不正确它是导致错误的最后一行代码.它说致命错误:无法解开Optional.None解决方法在你的例子中,距离是一个Int?否则称为可选的Int..toInt()返回Int?因为从String到Int的转换可能失败.请参阅以下示例:

  4. 如何在iOS中检测文本(字符串)语言?

    例如,给定以下字符串:我想检测每个声明的字符串中使用的语言.让我们假设已实现函数的签名是:如果没有检测到语言,则返回可选字符串.因此,适当的结果将是:有一个简单的方法来实现它吗?

  5. xamarin – 崩溃在AccountStore.Create().保存(e.Account,“);

    在Xamarin.Forms示例TodoAwsAuth中https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/oauth/成功登录后,在aOnAuthenticationCompleted事件中,应用程序在尝试保存到Xamarin.Auth时崩溃错误说不能对钥匙串说期待着寻求帮助.解决方法看看你

  6. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  7. xcode – 错误“线程1:断点2.1”

    我正在研究RESTAPI管理器.这是一个错误,我无法解决它.我得到的错误在下面突出显示.当我打电话给这个班级获取资源时:我评论的线打印:Thread1:breakpoint2.1我需要修复错误的建议.任何建议都非常感谢解决方法您可能在不注意的情况下意外设置了断点.单击并拖动代表断路器外部断点的蓝色刻度线以将其擦除.

  8. ios – 更改导航栏标题swift中的字符间距

    类型的值有人可以帮我这个或建议一种不同的方式来改变swift中导航栏标题中的字符间距吗?解决方法您无法直接设置属性字符串.你可以通过替换titleView来做一个技巧

  9. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

  10. ios – 如果我将自动释放的对象桥接到Core Foundation,我必须使用__bridge或__bridge_retained吗?

    ARC迁移工具遇到了这个问题:特别是,它不确定它是否应该执行__bridge或__bridge_retained.而我也是.-fileURLWithPath返回一个自动释放的对象,在这个地方我不是fileURL的所有者.但与此同时,该对象的保留计数至少为1.我敢打赌,这只能用__bridge来完成.解决方法您只想为此使用常规__bridge强制转换.仅当您想要管理强制转换CF对象的生命周期时,才会使用__bridge_retained.例如:所以__bridge_retained确实告诉编译器你有一个AR

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部