簡體   English   中英

反序列化字符串XML和錯誤:XML文檔中存在錯誤(1、2)

[英]Deserializing a string XML and error:There is an error in XML document (1, 2)

我需要反序列化字符串XML,但是我遇到了問題。

[XMLRoot]
public class OP
{
    [XmlElement]
    public string Auth;
    [XmlElement]
    public string User;
    [XmlElement]
    public string Password;
    [XmlElement]
    public string Client;
    [XmlElement]
    public string DownloadCode;
    [XmlElement]
    public string PartNumber;
    [XmlElement]
    public int FlexPO;
    [XmlArray]
    public string Terminals;
    [XmlElement]
    public string User;            
}

public void Test()
{
    var serializer = new XmlSerializer(typeof(OP));
    OP result;

    using (TextReader reader = new StringReader(XML))
    {
        result = (OP)serializer.Deserialize(reader);
    }

}

這是代碼,這是XML:

<CreateManufactoryOrder xmlns="http://tempuri.org/">
    <op>
        <Auth>
            <User>User</User>
            <Password>Password</Password>
        </Auth>
        <Client>01425787000104</Client>
        <DownloadCode>0460.0001</DownloadCode>
        <PartNumber>M268-773-C4-BRA-3</PartNumber>
        <FlexPO>887614_364</FlexPO>
        <Terminals>
            <String>529-995-835</String>
            <String>529-995-836</String>
            <String>529-995-837</String>
            <String>529-995-838</String>
        </Terminals>
    </op>
</CreateManufactoryOrder>

因此,當我調試代碼返回錯誤時:XML文檔(1、2)中存在錯誤。 我已經嘗試過以多種方式更改代碼,但是沒有任何運行。

您需要指定根元素名稱和名稱空間,更新[XmlRoot]屬性,如下所示:

[XmlRoot(ElementName = "CreateManufactoryOrder", Namespace= "http://tempuri.org/")]

添加后,我驗證了它現在可以反序列化而不會出現問題。

嘗試這個

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Xml; using System.Xml.Serialization; namespace ConsoleApplication1 { class Program { const string FILENAME = @"c:\\temp\\testxml"; static void Main(string[] args) { CreateManufactoryOrder createManufacturyOrder = new CreateManufactoryOrder() { op = new Op(){ auth = new Auth(){ user = "User", password = "Password" }, client = "01425787000104", downLoadCode = "0460.0001", partNumber = "M268-773-C4-BRA-3", flexPO = "887614_364", terminals = new List<Terminal>(){ new Terminal(){ m_String = "529-995-835"}, new Terminal(){ m_String = "529-995-836"}, new Terminal(){ m_String = "529-995-837"}, new Terminal(){ m_String = "529-995-838"} } } }; Test(createManufacturyOrder); } static public void Test(CreateManufactoryOrder createManufacturyOrder) { StreamWriter writer = new StreamWriter(FILENAME); XmlSerializer serializer = new XmlSerializer(typeof(CreateManufactoryOrder)); serializer.Serialize(writer, createManufacturyOrder); writer.Flush(); writer.Close(); writer.Dispose(); string XML = File.ReadAllText(FILENAME); using (TextReader reader = new StringReader(XML)) { CreateManufactoryOrder result = (CreateManufactoryOrder)serializer.Deserialize(reader); } } } [XmlRoot("CreateManufactoryOrder")] public class CreateManufactoryOrder { [XmlElement("op")] public Op op { get; set; } } [XmlRoot("op")] public class Op { [XmlElement("Auth")] public Auth auth { get; set; } [XmlElement("Client")] public string client; [XmlElement("DownloadCode")] public string downLoadCode { get; set; } [XmlElement("PartNumber")] public string partNumber { get; set; } [XmlElement("FlexPO")] public string flexPO { get; set; } [XmlElement("Terminals")] public List<Terminal> terminals { get; set; } } [XmlRoot("Auth")] public class Auth { [XmlElement("User")] public string user { get; set; } [XmlElement("Password")] public string password { get; set; } } public class Terminal { [XmlElement("String")] public string m_String { get; set; } } }​ 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM