2017-01-20 2 views
0

То, что я пытаюсь достичь, - это преобразование документа JObject в XML, а затем извлечение внешнего xml из документа XMl. Причины этого - отправить результаты в виде push-уведомления через 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> 

Чтобы извлечь Xml Из JObject Я использую следующий метод:

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

Вопрос: Как я могу дать свойство идентификатора в то же свойство текста?

+0

Если ваш Цель состоит в том, чтобы создать XML, зачем вообще использовать JObject? LINQ to XML будет намного лучше. Вы говорите, что пытаетесь преобразовать JObject в XML, но ваш вопрос действительно может * создать * JObject. Не могли бы вы пояснить, пожалуйста? –

+0

@JonSkeet Я пытаюсь построить XML, используя JObject, чтобы сохранить себя от написания XML непосредственно в виде строки. Я не знал о LINQ к XMl, я все равно проверю его. Я просто столкнулся с проблемой, о которой я говорил выше. –

+0

@JonSkeet Я сделал несколько поисков и благодаря вам моя жизнь стала проще сейчас .. Хе-хе .. Я использовал это 'XElement notificationPayload = новый XElement (« тост », новый XElement (« visual », новый XElement (« привязка » », новый XElement (« текст », сообщение уведомления, новый XAttribute (« id »,« 1 »)), новый XAttribute (« шаблон »,« ToastGeneric »)))); return notificationPayload.Value; ' –

ответ

4

В принципе, не используйте инструмент, ориентированный на JSON, для построения XML. Если вы уже были JSON, это имело бы смысл использовать Json.NET, чтобы преобразовать его в XML - но, как вы строите его с нуля, это гораздо чище использовать LINQ для XML:

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" 
       ) 
      ) 
     ) 
    ) 
);