C# Строит строку Json, но я получаю ошибку «Недопустимый декларатор анонимного члена типа».

#c# #json #linq

Вопрос:

Я пытаюсь создать строку Json, подобную этой:

 { 
  "StreetLines": [
    "101 Test St",
    "Ste 100"
  ],
  "City": "Dallas",
  "StateOrProvinceCode": "TX",
  "PostalCode": "75999",
  "CountryCode": "US"
}
 

Это мой код:

 var json = new
{
    StreetLines = new
    {
        toAddress1,
        toAddress2
    },
    new
    {
        City = toCity,
        StateOrProvinceCode = toState,
        PostalCode = toZip,
        CountryCode = toCountry
    }
};
 

Я получаю сообщение об ошибке «Недопустимый декларатор анонимного члена типа» в нижней части. Я не уверен, в чем проблема, буду признателен за любой совет.

Комментарии:

1. Линии улиц-это массив, а не объект. Кроме того, предполагается, что оставшиеся объекты недвижимости после линий улиц являются частью json объекта. См., например, мой пост.

2. Это ошибка компиляции. Избавьтесь от new { } окружающих City = toCity... наборов свойств. Т. е. . var json = new { StreetLines = new [] { toAddress1, toAddress2 }, City = toCity, StateOrProvinceCode = toState, PostalCode = toZip, CountryCode = toCountry }

Ответ №1:

Во-первых, обратите внимание, что StreetLines это массив JSON, поэтому вам следует использовать массив или список C# :

 StreetLines = new[] // notice the "[]"
{
    toAddress1,
    toAddress2
},
 

В вашем JSON ключи City StateOrProvinceCode и так далее находятся в том же объекте, StreetLines что и , поэтому в коде C# вам не следует создавать для них новый анонимный класс.

Если бы JSON был таким:

 { 
  "StreetLines": [
    "101 Test St",
    "Ste 100"
  ],
  "OtherPartsOfTheAddress": {
    "City": "Dallas",
    "StateOrProvinceCode": "TX",
    "PostalCode": "75999",
    "CountryCode": "US"
  }
}
 

Тогда вы сможете написать

 var json = new
{
    StreetLines = new[]
    {
        toAddress1,
        toAddress2
    },
    OtherPartsOfTheAddress = new // notice the key name
    {
        City = toCity,
        StateOrProvinceCode = toState,
        PostalCode = toZip,
        CountryCode = toCountry
    }
};
 

Но так как его нет OtherPartsOfTheAddress , вам просто нужно сделать:

 var json = new
{
    StreetLines = new[]
    {
        toAddress1,
        toAddress2
    },
    City = toCity,
    StateOrProvinceCode = toState,
    PostalCode = toZip,
    CountryCode = toCountry
};
 

Ответ №2:

Ваш код должен выглядеть следующим образом,

 var json = new
{
    StreetLines = new List<string>
    {
        toAddress1,
        toAddress2
    },
    City = toCity,
    StateOrProvinceCode = toState,
    PostalCode = toZip,
    CountryCode = toCountry
}

 

Линии улиц-это набор строк, а город, штат, почта и т. Д. Являются частью основного json.