2017-01-20 7 views
0

私が達成しようとしているのは、JObjectをXMLドキュメントに変換し、XMlドキュメントから外部XMLを抽出することです。この背後にある理由は、結果をAzure Notification Hubを介してプッシュ通知として送信することです。私が取得しようとしています何JObjectの他のプロパティのプロパティを正しく割り当てる方法は?

は次のとおりです。

<toast> 
    <visual> 
     <binding template="ToastGeneric"> 
      <text id="1">Message</text> 
     </binding> 
    </visual> 
</toast> 

私が試してみました:

JObject notificationPayload = new JObject(
    new JProperty("toast", 
     new JObject(
      new JProperty("visual", 
       new JObject(
        new JProperty("binding", 
         new JObject(
          new JProperty("@template", "ToastGeneric"), 
          new JProperty("text", notificationMessage, 
           new JProperty("@id", "1"))))))))); 

上記のコードは例外をスローしています:Can not add Newtonsoft.Json.Linq.JProperty to Newtonsoft.Json.Linq.JArray.するので、私は後にしようとしたことは次のとおりです。

JObject notificationPayload = new JObject(
    new JProperty("toast", 
     new JObject(
      new JProperty("visual", 
       new JObject(
        new JProperty("binding", 
         new JObject(
          new JProperty("@template", "ToastGeneric"), 
          new JProperty("text", notificationMessage, 
           new JObject(
            new JProperty("@id", "1")))))))))); 

上記のコードは私に結果を与えましたが、意図したものではありません。私が得たことだった。

<toast> 
    <visual> 
     <binding template="ToastGeneric"> 
      <text>Message</text> 
      <text id="1" /> 
     </binding> 
    </visual> 
</toast> 

私は次のメソッドを使用していますjオブジェクトからXMLを抽出するには:

string jsonStringToConvertToXmlString = JsonConvert.SerializeObject(notificationPayload); 
XmlDocument doc = JsonConvert.DeserializeXmlNode(jsonStringToConvertToXmlString); 
return doc.OuterXml; 

質問:どのように私は同じTextプロパティにidプロパティを与えることができますか?

+0

あなたの場合目的はXMLを作成することです、なぜJObjectを使うのですか? LINQ to XMLははるかに良い賭けになるでしょう。あなたはJObjectをXMLに変換しようとしていますが、あなたの質問は本当にJObjectを作成することができるようです。どうぞお分かりですか? –

+0

@ JonSkeet私はJObjectを使ってXMLを構築して、XMLを文字列として直接書くのをやめています。私はLINQ to XMlについて知らなかったが、私は今それをどうにか調べるだろう。私はちょうど上記の問題に直面した。 –

+0

@JonSkeet私はいくつかの検索をしました。あなたのおかげで、私の人生はもっと楽になりました。Hehe ..私はこの 'XElement notificationPayload = 新しいXElement(" toast "、 新しいXElement(" visual "、 新しいXElement "、 新しいXAttribute(" text "、notificationMessage、 new XAttribute(" id "、" 1 "))、 新しいXAttribute(" template "、" ToastGeneric "))))); return notificationPayload.Value; ' –

答えて

4

基本的に、JSON向けのツールを使用してXMLを構築しないでください。すでに JSONを持っていた場合、それはXMLに変換するJson.NETを使用するように理にかなって - しかし、あなたは最初からそれを構築しているとして、それはXMLにLINQを使用する多くのクリーナーです:

XDocument doc = new XDocument(
    new XElement("toast", 
     new XElement("visual", 
      new XElement("binding", 
       new XAttribute("template", "ToastGeneric"), 
       new XElement("text", 
        new XAttribute("id", 1), 
        "Message" 
       ) 
      ) 
     ) 
    ) 
); 
関連する問題