第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用 SGen 為映射到兩級(jí)數(shù)組的 XML 模式生成序列化程序集?

如何使用 SGen 為映射到兩級(jí)數(shù)組的 XML 模式生成序列化程序集?

C#
慕標(biāo)5832272 2023-09-09 16:26:21
我正在使用需要 XmlSerializerFormat 合約的第三方服務(wù);我想通過(guò)創(chuàng)建序列化程序集來(lái)加快啟動(dòng)速度,但 Sgen.exe 確實(shí)不喜歡 Xsd.exe 為其吐出嵌套數(shù)組的架構(gòu)中的特定構(gòu)造。該模式包括嵌套兩層深度的元素序列,如下所示:Foo.xsd<xs:schema targetNamespace="http://example.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.com" elementFormDefault="qualified">    <xs:element name="Foo" type="Foo"/>    <xs:complexType name="Foo">        <xs:sequence>            <xs:element name="List" type="FooList" minOccurs="0" maxOccurs="unbounded"/>        </xs:sequence>    </xs:complexType>    <xs:complexType name="FooList">        <xs:sequence>            <xs:element name="Item" type="FooListItem" minOccurs="0" maxOccurs="unbounded"/>        </xs:sequence>    </xs:complexType>    <xs:complexType name="FooListItem">        <xs:simpleContent>            <xs:extension base="xs:string"/>        </xs:simpleContent>    </xs:complexType></xs:schema>即:一個(gè) toplevelFoo包含多個(gè)FooLists,aFooList包含多個(gè)FooListItem。運(yùn)行xsd /c Foo.xsd會(huì)產(chǎn)生以下結(jié)果:Foo.csusing System.Xml.Serialization;[XmlType(Namespace="http://example.com")][XmlRoot(Namespace="http://example.com", IsNullable=false)]public partial class Foo {    private FooListItem[][] listField;    [XmlArrayItem("Item", typeof(FooListItem), IsNullable=false)]    public FooListItem[][] List {        get {            return this.listField;        }        set {            this.listField = value;        }    }}也就是說(shuō),F(xiàn)ooList由于某種原因,不存在 for 類,而是只有一個(gè)嵌套的FooListItems 數(shù)組。然而,當(dāng)我構(gòu)建它并僅使用生成的 DLL 運(yùn)行 Sgen.exe 時(shí)sgen /keep obj\Debug\net461\Foo.dll,會(huì)出現(xiàn)以下錯(cuò)誤消息:錯(cuò)誤CS0030:無(wú)法將類型“FooListItem []”轉(zhuǎn)換為“FooListItem”錯(cuò)誤CS0029:無(wú)法將類型“FooListItem”隱式轉(zhuǎn)換為“FooListItem []”因此,Xsd.exe 和 Sgen.exe 似乎試圖實(shí)現(xiàn)這樣一種模式,即元素具有包含 X 項(xiàng)的顯式“X 列表”子元素,而無(wú)需為列表元素創(chuàng)建單獨(dú)的類,而僅依賴于序列化的名稱合成中間元素的性能;當(dāng)列表元素本身可能重復(fù)時(shí),這種情況就會(huì)中斷。有辦法解決這個(gè)問(wèn)題嗎?就像強(qiáng)制 Xsd.exe 為中間元素生成一個(gè)類一樣?我想這可能是 Xsd.exe 和 Sgen.exe 中的一個(gè)實(shí)際錯(cuò)誤,但這在合理的時(shí)間范圍內(nèi)并不能真正幫助我。如上所述,這是第三方服務(wù);我完全無(wú)法控制架構(gòu),并且對(duì)生成代碼的手動(dòng)編輯越少越好,因?yàn)槲业膶?shí)際文件有數(shù)萬(wàn)行長(zhǎng)。
查看完整描述

1 回答

?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

錯(cuò)誤就在這一行


來(lái)自: [XmlArrayItem("Item", typeof(FooListItem), IsNullable=false)]


至:“[XmlArrayItem(“Item”,IsNullable = false)]


這是工作代碼的示例:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Xml;

using System.Xml.Serialization;


namespace ConsoleApplication1

{

    class Program

    {

        const string FILENAME = @"c:\temp\test.xml";

        static void Main(string[] args)

        {


            XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();

            namespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");

            namespaces.Add("", "http://example.com");


            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent = true;


            XmlWriter writer = XmlWriter.Create(FILENAME, settings);

            XmlSerializer serializer = new XmlSerializer(typeof(Foo));


            Foo foo = new Foo()

            {

                List = new FooListItem[][] {

                    new FooListItem[] { 

                        new FooListItem() { Value = "abc"},

                        new FooListItem() { Value = "abd"},

                        new FooListItem() { Value = "abe"}

                    },

                    new FooListItem[] { 

                        new FooListItem() { Value = "bbc"},

                        new FooListItem() { Value = "bbd"},

                        new FooListItem() { Value = "bbe"}

                    },

                    new FooListItem[] { 

                        new FooListItem() { Value = "cbc"},

                        new FooListItem() { Value = "cbd"},

                        new FooListItem() { Value = "cbe"}

                    }

                }

            };


            serializer.Serialize(writer, foo, namespaces);




        }

    }

    [XmlType(Namespace = "http://example.com")]

    [XmlRoot(Namespace = "http://example.com", IsNullable = false)]

    public partial class Foo

    {


        private FooListItem[][] listField;


        [XmlArrayItem("Item", IsNullable = false)]

        public FooListItem[][] List

        {

            get

            {

                return this.listField;

            }

            set

            {

                this.listField = value;

            }

        }

    }


    [XmlType(Namespace = "http://example.com")]

    public partial class FooListItem

    {


        private string valueField;


        [XmlText]

        public string Value

        {

            get

            {

                return this.valueField;

            }

            set

            {

                this.valueField = value;

            }

        }

    }



查看完整回答
反對(duì) 回復(fù) 2023-09-09
  • 1 回答
  • 0 關(guān)注
  • 131 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)