私は StringReader を使用して xml ストリームを読み取り、そのストリームを XML として読み取ってシリアライズおよびデアリライズしたいと考えています。何らかの理由で正常に動作していましたが、XmlReader 変数が null を返します。表示される XML は以前と同じです。
私のコードは次のとおりです。
StringReader stringReader = new StringReader(result);
stringReader.ReadLine();//omit the first line that contains xml encoding
XmlReader xmlReader = XmlReader.Create(stringReader);
XmlSerializer XmlSerializer = new XmlSerializer(typeof(ResponseDoc));
ResponseDoc XmlResponseDoc = (ResponseDoc)XmlSerializer.Deserialize(xmlReader);
結果の viariable の XML 形式は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<ResponseDoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<response>
<entitylineNumber>1</entitylineNumber>
<statusCode>Success</statusCode>
<entityUid>0BA0C06E9CBAA3D890D025A37A577DDB074BA9A9</entityUid>
<entityMark>1000000115468</entityMark>
</response>
</ResponseDoc>
私の xmlReader 変数は null です。stringReader.ReadLine(); も削除しようとしました。しかし、何も変わりませんでした。エンコーディング行が存在する場合、それをシリアル化できないため、これを使用しました。
ResponseDoc クラス:
#region XSD Schema
[XmlRoot(ElementName = "Responses", Namespace = "")]
public partial class ResponseDoc
{
private ResponseType[] responseField;
/// <remarks/>
[System.Xml.Serialization.XmlElement(ElementName = "Response", Namespace = "")]
public ResponseType[] response
{
get
{
return this.responseField;
}
set
{
this.responseField = value;
}
}
}
[XmlRoot(ElementName = "Response", Namespace = "")]
public partial class ResponseType
{
private int entitylineNumberField;
private string statusCodeField;
private string uid;
private string markUid;
private ResponseTypeErrors[] responseTypeErrors;
/// <remarks/>
[XmlElement(ElementName = "inv_number", Namespace = "")]
public string entitylineNumber
{
get
{
return this.entitylineNumberField.ToString();
}
set
{
this.entitylineNumberField = int.Parse(value);
}
}
/// <remarks/>
[XmlElement(ElementName = "StatusCode", Namespace = "")]
public string statusCode
{
get
{
return this.statusCodeField;
}
set
{
this.statusCodeField = value;
}
}
[XmlElement(ElementName = "Uid", Namespace = "")]
public string Uid
{
get
{
return this.uid;
}
set
{
this.uid = value;
}
}
[XmlElement(ElementName = "Mark", Namespace = "")]
public string Mark
{
get
{
return this.markUid;
}
set
{
this.markUid = value;
}
}
[XmlElement(ElementName = "Errors", Namespace = "")]
public ResponseTypeErrors[] Errors
{
get
{
return this.responseTypeErrors;
}
set
{
this.responseTypeErrors = value;
}
}
}
[XmlRoot(ElementName = "Errors", Namespace = "")]
public partial class ResponseTypeErrors
{
private ErrorType[] errorField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Error")]
public ErrorType[] error
{
get
{
return this.errorField;
}
set
{
this.errorField = value;
}
}
}
[XmlRoot(ElementName = "Error", Namespace = "")]
public partial class ErrorType
{
private string messageField;
private int codeField;
/// <remarks/>
[XmlElement(ElementName = "Message", Namespace = "")]
public string message
{
get
{
return this.messageField;
}
set
{
this.messageField = value;
}
}
/// <remarks/>
[XmlElement(ElementName = "Code", Namespace = "")]
public int code
{
get
{
return this.codeField;
}
set
{
this.codeField = value;
}
}
}
#endregion
更新: 皆さんが私の XSD スキーマについて答えてくれているようです。問題は、XML をデシリアライズしないことです。私の問題は、変数 xmlReader が
XmlReader xmlReader = XmlReader.Create(stringReader);
{None} ですが、結果変数に xml の回答があり、それを stringReader に渡します。私の質問で否定的な人がいる理由がわかりません。私の問題が何であるかは非常に明確であり、コードについて十分な情報を提供していると確信しています.もっと知っていれば、自分で解決するでしょう. strinReader と xmlReader のスクリーンショットもアップロードしました