XMLファイルをC#オブジェクトに読み込もうとしています。 XMLには複数の子要素が含まれています。 (バージョン生き、pageidに、など)私はすべてのトップフィールドにアクセスすることができ、以下のコードを使用しても問題なく、私は子ノードの値にアクセスしようとすると、しかし、私は私があると仮定しC#子要素を持つオブジェクトにXMLをパースする
Object reference not set to an instance of an object.
を受け取りますXMLSerializerがノードを自分のオブジェクトに一致させることができないことを示します。私は配列の上のリストフィールドのような異なるオブジェクトタイプを試しましたが、それでも同じ結果を得ているようですので、これにアプローチする最良の方法は何ですか?
正しい方向に私を指し示す助けがあれば大歓迎です。あなたのXMLを解析するXMLへ
XML
<?xml version="1.0" encoding="utf-8"?>
<LiveModelStruct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<version>1</version>
<live>true</live>
<pageid>1</pageid>
<data>test data</data>
<giveawayactive>false</giveawayactive>
<giveawayserial>00000000</giveawayserial>
<templates>
<template>
<id>1</id>
<title>Template 1</title>
<type>Opener</type>
</template>
<template>
<id>2</id>
<title>Template 2</title>
<type>Song</type>
</template>
</templates>
</LiveModelStruct>
オブジェクト
[XmlRoot(ElementName = "LiveModelStruct")]
public class LiveModelStruct
{
[XmlElement(ElementName = "version")]
public string version { get; set; }
[XmlElement(ElementName = "live")]
public string live { get; set; }
[XmlElement(ElementName = "pageid")]
public string pageid { get; set; }
[XmlElement(ElementName = "data")]
public string data { get; set; }
[XmlElement(ElementName = "giveawayactive")]
public string giveawayactive { get; set; }
[XmlElement(ElementName = "giveawayserial")]
public string giveawayserial { get; set; }
[XmlElement(ElementName = "templates")]
public Templates Templates { get; set; }
[XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsi { get; set; }
[XmlAttribute(AttributeName = "xsd", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsd { get; set; }
}
[XmlRoot(ElementName = "templates")]
public class Templates
{
[XmlElement(ElementName = "template")]
public Template[] Template { get; set; }
}
[XmlRoot(ElementName = "template")]
public class Template
{
[XmlElement(ElementName = "id")]
public string id { get; set; }
[XmlElement(ElementName = "title")]
public string title { get; set; }
[XmlElement(ElementName = "type")]
public string type { get; set; }
}
コード
...
var serializer = new XmlSerializer(typeof(LiveModelStruct));
var data = (LiveModelStruct)serializer.Deserialize(stream);
var test1 = data.version;
Debug.WriteLine(test1); //Returns 1 as it should
var test = data.Templates.Template[0].title; //Throws Error
Debug.WriteLine(test);
私はコードに何かを見ることができないXML – Jack
にLINQを使用してください。私はLinqPadにすべてを貼り付け、それを実行し、それは私に1を与え、 テンプレート1、例外はありません。 –
私はここでdotnetfiddleを作った:https://dotnetfiddle.net/kDv4nFそしてそれも働く。 –