如何正确地将JSON字符串数组转换为XML [已关闭]

jdzmm42g  于 2023-01-06  发布在  其他
关注(0)|答案(2)|浏览(137)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

昨天关门了。
Improve this question
我有一个关于在XML中正确表示JSON字符串数组的问题。我想构建以下JSON数据(预期的API输入JSON):

{
  "relatiesoort": [
    "string"
  ],
  "modifiedOn": "string",
  "relatiecode": 0,
  "naam": "string",
  "vestigingsAdres": {
    "contactpersoon": "string",
    "straat": "string",
    "postcode": "string",
    "plaats": "string",
    "land": {
      "id": "00000000-0000-0000-0000-000000000000",
      "uri": "string"
    }
  },
  "correspondentieAdres": {
    "contactpersoon": "string",
    "straat": "string",
    "postcode": "string",
    "plaats": "string",
    "land": {
      "id": "00000000-0000-0000-0000-000000000000",
      "uri": "string"
    }
  },
  "telefoon": "string",
  "mobieleTelefoon": "string"
}

我最初希望以XML格式构建它,然后将其转换为JSON。

<?xml version="1.0" encoding="UTF-8" ?> 
        <root>   
    <relatiesoort>string</relatiesoort>   
    <modifiedOn>string</modifiedOn>   
    <relatiecode>0</relatiecode>   
    <naam>string</naam>   
    <vestigingsAdres>
                <contactpersoon>string</contactpersoon>
                <straat>string</straat>
                <postcode>string</postcode>
                <plaats>string</plaats>
                <land>
                  <id>00000000-0000-0000-0000-000000000000</id>
                  <uri>string</uri>
                </land>   
    </vestigingsAdres>   
    <correspondentieAdres>
                <contactpersoon>string</contactpersoon>
                <straat>string</straat>
                <postcode>string</postcode>
                <plaats>string</plaats>
                <land>
                  <id>00000000-0000-0000-0000-000000000000</id>
                  <uri>string</uri>
                </land>   
    </correspondentieAdres>   
    <telefoon>string</telefoon>   
    <mobieleTelefoon>string</mobieleTelefoon> 
    </root>

.....然后我使用NewtonSoft.Json将其翻译回Json并将其提供给API。
但问题是,如果我把它转换回Json(这也可以用这个网站:https://www.freeformatter.com/xml-to-json-converter.html)我得到了以下结果:

{
  "relatiesoort": "string",
  "modifiedOn": "string",
  "relatiecode": "0",
  "naam": "string",
  "vestigingsAdres": {
    "contactpersoon": "string",
    "straat": "string",
    "postcode": "string",
    "plaats": "string",
    "land": {
      "id": "00000000-0000-0000-0000-000000000000",
      "uri": "string"
    }
  },
  "correspondentieAdres": {
    "contactpersoon": "string",
    "straat": "string",
    "postcode": "string",
    "plaats": "string",
    "land": {
      "id": "00000000-0000-0000-0000-000000000000",
      "uri": "string"
    }
  },
  "telefoon": "string",
  "mobieleTelefoon": "string"
}

正如您所看到的,“relatiesoort字段”不再是JSON数组,API会给出错误,因为JSON不是预期的格式。我想要的是以这样一种方式构建XML,即relatiesoort字段在转换回JSON后仍然是JSON数组。
为了实现这一点:我应该将此字段格式化为XML格式吗?:

<relatiesoort>
    <element>klant</element>
</relatiesoort>

如何使用NewtonSoft.Json库来实现这一点?

atmip9wb

atmip9wb1#

没有任何东西指出relatiesort是一个数组,你不能自动地把字符串转换成字符串数组,要自动转换它应该是

<relatiesoort>string</relatiesoort> 
<relatiesoort>string</relatiesoort>

在这种情况下,你需要一个带有relatiesoort属性的xml属性数组的c#类。因此,唯一的正确方法是,你需要将XML转换为c#并序列化为一个json字符串。如果你没有这个类,另一种方法是解析你的json并更正值

var jObj = JObject.Parse(json);

if (jObj["relatiesoort"].Type != JTokenType.Array) 
{
jObj["relatiesoort"] = new JArray {jObj["relatiesoort"]};
json = jObj.ToString();
}

Json

{
  "relatiesoort": [
    "string"
  ],
  "modifiedOn": "string",
   .....
}
gwo2fgha

gwo2fgha2#

您应该查看一下this bit of doc

string json = @"...";
XmlDocument doc = (XmlDocument) JsonConvert.DeserializeXmlNode(json);

现在,从我所看到的,vestigingsAdrescorrespondentieAdres看起来好像它们是同一类型的类对象,但是考虑到NewtonSoft的工作方式,它们很可能不会被分组到一个集合下。我可以预见,您可能希望它可能是Dictionary<string, yourObjHere>,所以 * 如果 * 是这样的话,您需要在内存中构造对象,* 然后 * 将其序列化为JSON。要实现这一点,如果您已经对类对象建模,则可以使用JsonConvert.DeserializeObject<yourObj>(jsonString);
如果您对直接转储到XML没有意见,那就不用担心

相关问题