[转载][c#]asp.net开发微信公众平台(2)多层架构框架搭建和入口实现 - 沫尘 - 博客园

[转载]asp.net开发微信公众平台(2)多层架构框架搭建和入口实现 – 沫尘 – 博客园.

上篇已经设计出比较完善的数据库了,这篇开始进入代码。  首先把上篇设计的数据库脚本在数据库中执行下,生成数据库,然后在VS中建立项目,为了方便理解和查看,我设计的都是很直白的类名和文件名,没有命名空间前缀。

采用接口方式,共8个项目:7个类库和一个MVC项目,  分别为:

显示层——MVC项目

业务逻辑层——访问接口IBLL、具体实现BLL

数据访问层——访问接口IDAL、具体实现DAL

数据(模型)——DataModel

通用方法——Common

仓储——Factory

这里的仓储并不为了生产业务逻辑层和数据访问层的接口,而是为了存放EntityFramework上下文对象和一些缓存管理,业务逻辑层和数据访问层的接口生产(实现)工作我会交给Spring.NET注入实现。 框架搭建好之后如下:

 

框架搭建好了,接下去把数据库添加进来,在DAL中(注意是DAL不是datamodel)添加新项,选择数据–ADO.NET实体数据模型:

 

取个名字,就叫WeixinModel吧, 选择从数据库生成,配置一下数据库连接到之前生成的数据库,一路下一步,最后加载到edmx, 在edmx上右键–添加代码生成项,选择代码:

选DbContext Generator,  然后保存一下edmx, 之后把edmx和weixinmodel.tt复制到DataModel,删除DAL中的edmx和weixinmodel.tt, 在datamodel中打开weixinmodel.tt保存一下即可, 另外需要在DAL中保留的WeiXinModel.Context.cs中声明datamodel命名空间。

框架和数据模型都有了,接下去在DAL、IDAL、BLL、IBLL中按照正确的引用层次添加引用,并写几个常用方法,就可以开始在显示层中使用了,

这里举例在DAL中写添删改查方法:

<span class="com">//添加</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> T </span><span class="typ">AddEntity</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="typ">DbContext</span><span class="pln"> db</span><span class="pun">,</span><span class="pln">T entity</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">where</span><span class="pln"> T </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">class</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">Entry</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="pln">entity</span><span class="pun">).</span><span class="typ">State</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">EntityState</span><span class="pun">.</span><span class="typ">Added</span><span class="pun">;</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">SaveChanges</span><span class="pun">();</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> entity</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
 
        </span><span class="com">//修改</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">bool</span><span class="pln"> </span><span class="typ">UpdateEntity</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="typ">DbContext</span><span class="pln"> db</span><span class="pun">,</span><span class="pln">T entity</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">where</span><span class="pln"> T </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">class</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">Set</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>().</span><span class="typ">Attach</span><span class="pun">(</span><span class="pln">entity</span><span class="pun">);</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">Entry</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="pln">entity</span><span class="pun">).</span><span class="typ">State</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">EntityState</span><span class="pun">.</span><span class="typ">Modified</span><span class="pun">;</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">SaveChanges</span><span class="pun">();</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
        </span><span class="com">//删除</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">bool</span><span class="pln"> </span><span class="typ">DeleteEntity</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="typ">DbContext</span><span class="pln"> db</span><span class="pun">,</span><span class="pln">T entity</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">where</span><span class="pln"> T </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">class</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">Set</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>().</span><span class="typ">Attach</span><span class="pun">(</span><span class="pln">entity</span><span class="pun">);</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">Entry</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="pln">entity</span><span class="pun">).</span><span class="typ">State</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">EntityState</span><span class="pun">.</span><span class="typ">Deleted</span><span class="pun">;</span><span class="pln">
            db</span><span class="pun">.</span><span class="typ">SaveChanges</span><span class="pun">();</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
 
        </span><span class="pun">}</span><span class="pln">
 
 
 
 
        </span><span class="com">// 返回一个对象</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> T </span><span class="typ">InfoEntities</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="typ">DbContext</span><span class="pln"> db</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Expression</span><span class="pun"><</span><span class="typ">Func</span><span class="pun"><</span><span class="pln">T</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">bool</span><span class="pun">>></span><span class="pln"> whereLambda</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">where</span><span class="pln"> T </span><span class="pun">:</span><span class="pln"> </span><span class="kwd">class</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
 
            </span><span class="kwd">return</span><span class="pln"> db</span><span class="pun">.</span><span class="typ">Set</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>().</span><span class="typ">Where</span><span class="pun"><</span><span class="pln">T</span><span class="pun">>(</span><span class="pln">whereLambda</span><span class="pun">).</span><span class="typ">FirstOrDefault</span><span class="pun">();</span><span class="pln">
 
        </span><span class="pun">}</span>

对应的把接口、业务逻辑层都写上。

现在来到显示层,默认的MVC项目是返回VIEW, 这里我们不需要返回页面, 把home中的index改成Void返回类型, 接下去就是接收微信发来的请求进行判断了,验证请求—-接收POST数据—分析XML—-解析成自己想要的数据

  入口:首先验证消息来源是微信服务器,然后解析收到的xml,解析成功有数据则执行LookMsgType方法来进行处理

<span class="kwd">private</span><span class="pln"> IBLL</span><span class="pun">.</span><span class="typ">IDoWei</span><span class="pln"> </span><span class="typ">BLLWei</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">DbContext</span><span class="pln"> dbHome </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
        </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> token </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
        </span><span class="typ">Dictionary</span><span class="pun"><</span><span class="kwd">string</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">></span><span class="pln"> xmlModel </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Dictionary</span><span class="pun"><</span><span class="kwd">string</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">>();</span><span class="pln">        
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">Index</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            dbHome</span><span class="pun">=</span><span class="typ">FContext</span><span class="pun">.</span><span class="typ">WeiXinDbContext</span><span class="pun">();</span><span class="pln">
            </span><span class="com">//xml字符串</span><span class="pln">
            </span><span class="kwd">string</span><span class="pln"> xmlData </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">.</span><span class="typ">Empty</span><span class="pun">;</span><span class="pln">
            </span><span class="com">//请求类型</span><span class="pln">
            </span><span class="kwd">string</span><span class="pln"> method</span><span class="pun">=</span><span class="typ">Request</span><span class="pun">.</span><span class="typ">HttpMethod</span><span class="pun">.</span><span class="typ">ToLower</span><span class="pun">();</span><span class="pln">
            </span><span class="kwd">string</span><span class="pln"> signature </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">QueryString</span><span class="pun">[</span><span class="str">"signature"</span><span class="pun">];</span><span class="pln">
            </span><span class="kwd">string</span><span class="pln"> timestamp </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">QueryString</span><span class="pun">[</span><span class="str">"timestamp"</span><span class="pun">];</span><span class="pln">
            </span><span class="kwd">string</span><span class="pln"> nonce </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">QueryString</span><span class="pun">[</span><span class="str">"nonce"</span><span class="pun">];</span><span class="pln">
            </span><span class="com">//验证接入和每次请求验证真实性</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">method </span><span class="pun">==</span><span class="pln"> </span><span class="str">"get"</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">CheckSign</span><span class="pun">(</span><span class="pln">signature</span><span class="pun">,</span><span class="pln">timestamp</span><span class="pun">,</span><span class="pln">nonce</span><span class="pun">))</span><span class="pln">
                </span><span class="pun">{</span><span class="pln">
                    </span><span class="typ">Often</span><span class="pun">.</span><span class="typ">ResponseToEnd</span><span class="pun">(</span><span class="typ">Request</span><span class="pun">.</span><span class="typ">QueryString</span><span class="pun">[</span><span class="str">"echostr"</span><span class="pun">]);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
                </span><span class="kwd">else</span><span class="pln">
                </span><span class="pun">{</span><span class="pln">
                    </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Status</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"403"</span><span class="pun">;</span><span class="pln">
                    </span><span class="typ">Often</span><span class="pun">.</span><span class="typ">ResponseToEnd</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="com">//处理接收到的POST消息</span><span class="pln">
            </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">method </span><span class="pun">==</span><span class="pln"> </span><span class="str">"post"</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="kwd">using</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Stream</span><span class="pln"> stream </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">InputStream</span><span class="pun">)</span><span class="pln">
                </span><span class="pun">{</span><span class="pln">
                    </span><span class="typ">Byte</span><span class="pun">[]</span><span class="pln"> byteData </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Byte</span><span class="pun">[</span><span class="pln">stream</span><span class="pun">.</span><span class="typ">Length</span><span class="pun">];</span><span class="pln">
                    stream</span><span class="pun">.</span><span class="typ">Read</span><span class="pun">(</span><span class="pln">byteData</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Int32</span><span class="pun">)</span><span class="pln">stream</span><span class="pun">.</span><span class="typ">Length</span><span class="pun">);</span><span class="pln">
                    xmlData </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Encoding</span><span class="pun">.</span><span class="pln">UTF8</span><span class="pun">.</span><span class="typ">GetString</span><span class="pun">(</span><span class="pln">byteData</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
                </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="kwd">string</span><span class="pun">.</span><span class="typ">IsNullOrEmpty</span><span class="pun">(</span><span class="pln">xmlData</span><span class="pun">))</span><span class="pln">
                </span><span class="pun">{</span><span class="pln">
                    </span><span class="kwd">try</span><span class="pln">
                    </span><span class="pun">{</span><span class="pln">
                        xmlModel </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ReadXml</span><span class="pun">.</span><span class="typ">GetXmlModel</span><span class="pun">(</span><span class="pln">xmlData</span><span class="pun">);</span><span class="pln">
                    </span><span class="pun">}</span><span class="pln">
                    </span><span class="kwd">catch</span><span class="pln">
                    </span><span class="pun">{</span><span class="pln">
                        </span><span class="com">//未能正确处理 给微信服务器回复默认值</span><span class="pln">
                        </span><span class="typ">Often</span><span class="pun">.</span><span class="typ">ResponseToEnd</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
                    </span><span class="pun">}</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
                </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">xmlModel</span><span class="pun">.</span><span class="typ">Count</span><span class="pln"> </span><span class="pun">></span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
                </span><span class="pun">{</span><span class="pln">
                    </span><span class="kwd">string</span><span class="pln"> msgType </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ReadXml</span><span class="pun">.</span><span class="typ">ReadModel</span><span class="pun">(</span><span class="str">"MsgType"</span><span class="pun">,</span><span class="pln"> xmlModel</span><span class="pun">);</span><span class="pln">
                    </span><span class="typ">LookMsgType</span><span class="pun">(</span><span class="pln">msgType</span><span class="pun">);</span><span class="pln">
                </span><span class="pun">}</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="kwd">else</span><span class="com">//除了post和get外 如head皆视为非法请求</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Status</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"403"</span><span class="pun">;</span><span class="pln">
                </span><span class="typ">Often</span><span class="pun">.</span><span class="typ">ResponseToEnd</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln"
            </span><span class="pun">}</span><span class="pln">
            dbHome</span><span class="pun">.</span><span class="typ">Dispose</span><span class="pun">();</span><span class="pln">
        </span><span class="pun">}</span>

这里用到的验证方法:

<span class="com">/// <summary></span><span class="pln">
        </span><span class="com">/// 验证签名</span><span class="pln">
        </span><span class="com">/// </summary></span><span class="pln">
        </span><span class="com">/// <param name="signature"></param></span><span class="pln">
        </span><span class="com">/// <param name="timestamp"></param></span><span class="pln">
        </span><span class="com">/// <param name="nonce"></param></span><span class="pln">
        </span><span class="com">/// <returns></returns></span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">bool</span><span class="pln"> </span><span class="typ">CheckSign</span><span class="pun">(</span><span class="kwd">string</span><span class="pln"> signature</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> timestamp</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> nonce</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="typ">List</span><span class="str"><string></span><span class="pln"> list </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">List</span><span class="str"><string></span><span class="pun">();</span><span class="pln">
            list</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">token</span><span class="pun">);</span><span class="pln">
            list</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">timestamp</span><span class="pun">);</span><span class="pln">
            list</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">nonce</span><span class="pun">);</span><span class="pln">
            </span><span class="com">//默认排序</span><span class="pln">
            list</span><span class="pun">.</span><span class="typ">Sort</span><span class="pun">();</span><span class="pln">
            </span><span class="kwd">string</span><span class="pln"> tmpStr </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">.</span><span class="typ">Empty</span><span class="pun">;</span><span class="pln">
            list</span><span class="pun">.</span><span class="typ">All</span><span class="pun">(</span><span class="pln">l </span><span class="pun">=></span><span class="pln"> </span><span class="pun">{</span><span class="pln"> tmpStr </span><span class="pun">+=</span><span class="pln"> l</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln"> </span><span class="pun">});</span><span class="pln">
            tmpStr </span><span class="pun">=</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Web</span><span class="pun">.</span><span class="typ">Security</span><span class="pun">.</span><span class="typ">FormsAuthentication</span><span class="pun">.</span><span class="typ">HashPasswordForStoringInConfigFile</span><span class="pun">(</span><span class="pln">tmpStr</span><span class="pun">,</span><span class="pln"> </span><span class="str">"SHA1"</span><span class="pun">);</span><span class="pln">
            </span><span class="com">//验证</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">tmpStr </span><span class="pun">==</span><span class="pln"> signature</span><span class="pun">)</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span>

仓储中的EF上下文:

<span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">DbContext</span><span class="pln"> </span><span class="typ">WeiXinDbContext</span><span class="pun">()</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="typ">DbContext</span><span class="pln"> dbcontext </span><span class="pun">=</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">WeiXinEntities</span><span class="pun">();</span><span class="pln">  </span><span class="com">//创建</span><span class="pln">
            dbcontext</span><span class="pun">.</span><span class="typ">Configuration</span><span class="pun">.</span><span class="typ">AutoDetectChangesEnabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="com">//自动检测配置更改</span><span class="pln">
            dbcontext</span><span class="pun">.</span><span class="typ">Configuration</span><span class="pun">.</span><span class="typ">LazyLoadingEnabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="com">//延迟加载</span><span class="pln">
            dbcontext</span><span class="pun">.</span><span class="typ">Configuration</span><span class="pun">.</span><span class="typ">ValidateOnSaveEnabled</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="com">//自动跟踪</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> dbcontext</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span>

Common中的解析微信发来的XML方法

<span class="com">//把接收到的XML转为字典</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="typ">Dictionary</span><span class="pun"><</span><span class="kwd">string</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">></span><span class="pln"> </span><span class="typ">GetXmlModel</span><span class="pun">(</span><span class="kwd">string</span><span class="pln"> xmlStr</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="typ">XmlDocument</span><span class="pln"> doc </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XmlDocument</span><span class="pun">();</span><span class="pln">
            doc</span><span class="pun">.</span><span class="typ">LoadXml</span><span class="pun">(</span><span class="pln">xmlStr</span><span class="pun">);</span><span class="pln">
            </span><span class="typ">Dictionary</span><span class="pun"><</span><span class="kwd">string</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">></span><span class="pln"> mo </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Dictionary</span><span class="pun"><</span><span class="kwd">string</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">>();</span><span class="pln">
            </span><span class="kwd">var</span><span class="pln"> data </span><span class="pun">=</span><span class="pln"> doc</span><span class="pun">.</span><span class="typ">DocumentElement</span><span class="pun">.</span><span class="typ">ChildNodes</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> data</span><span class="pun">.</span><span class="typ">Count</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
            </span><span class="pun">{</span><span class="pln">
                mo</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="pln">data</span><span class="pun">.</span><span class="typ">Item</span><span class="pun">(</span><span class="pln">i</span><span class="pun">).</span><span class="typ">LocalName</span><span class="pun">,</span><span class="pln"> data</span><span class="pun">.</span><span class="typ">Item</span><span class="pun">(</span><span class="pln">i</span><span class="pun">).</span><span class="typ">InnerText</span><span class="pun">);</span><span class="pln">
            </span><span class="pun">}</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> mo</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
 
 
 
        </span><span class="com">////从字典中读取指定的值</span><span class="pln">
        </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">static</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">ReadModel</span><span class="pun">(</span><span class="kwd">string</span><span class="pln"> key</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Dictionary</span><span class="pun"><</span><span class="kwd">string</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">string</span><span class="pun">></span><span class="pln"> model</span><span class="pun">)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">string</span><span class="pln"> str </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
            model</span><span class="pun">.</span><span class="typ">TryGetValue</span><span class="pun">(</span><span class="pln">key</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">out</span><span class="pln"> str</span><span class="pun">);</span><span class="pln">
            </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">str</span><span class="pun">==</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln">
                str </span><span class="pun">=</span><span class="pln"> </span><span class="str">""</span><span class="pun">;</span><span class="pln">
            </span><span class="kwd">return</span><span class="pln"> str</span><span class="pun">;</span><span class="pln">
        </span><span class="pun">}</span>
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

登录

注册