2017-02-20 35 views
0

Я создал класс C# из образца JSON-вывода, используя Graph Explorer с контактами (как показано ниже). Однако, когда я прохожу сериализированный объект (используя JsonConvert.SerializeObject (MyClass)) с нулевыми значениями свойств строки массива к операции POST, чтобы создать контакт, я получаю следующее сообщение об ошибке в ответ:Как собираются строковые коллекции в пользовательском классе C# для контактов с API-интерфейсом REST Outlook?

нулевого значение было найдено свойство «BusinessPhones», которое имеет ожидаемый тип «Collection (Edm.String) [Nullable = False]». Ожидаемый тип «Коллекция (Edm.String) [Nullable = False]» не позволяет нулевые значения.

(для справки, это поддерживаемые Контакт свойства: https://msdn.microsoft.com/en-us/office/office365/api/complex-types-for-mail-contacts-calendar#contact)

Вот пример исходного JSON:

{"AssistantName":null,"Birthday":null,"BusinessAddress":null,"BusinessPhones":null,"Categories":null,"Children":null,"CompanyName":"Fun Toys and Bikes","Department":null,"DisplayName":"Mr. Robert E. Ahlering","EmailAddresses":[{"Address":"[email protected]","Name":"Robert E. Ahlering ([email protected])"}],"FileAs":null,"Generation":null,"GivenName":"Robert","HomeAddress":null,"Initials":null,"JobTitle":"Owner","Manager":null,"MiddleName":null,"MobilePhone1":null,"NickName":null,"OfficeLocation":null,"OtherAddress":null,"PersonalNotes":null,"Profession":null,"SpouseName":null,"Surname":"Ahlering","Title":null,"YomiCompanyName":null,"YomiGivenName":null,"YomiSurname":null} 

Я считаю, что правильное форматирование для нулевого значения BusinessPhones (для выберите один из массивов строк) должен быть «BusinessPhones»: [], а не «BusinessPhones: null».

Так как я могу реализовать свойства строкового массива/коллекции в классе для размещения этого?

public partial class OutlookContact 
{ 
    public partial class Businessaddress 
    { 
     public object City { get; set; } 

     public object CountryOrRegion { get; set; } 

     public object PostalCode { get; set; } 

     public object State { get; set; } 

     public object Street { get; set; } 
    } 

    public partial class Emailaddress 
    { 
     public string Address { get; set; } 

     public string Name { get; set; } 
    } 

    public partial class Homeaddress 
    { 
     public string City { get; set; } 

     public object CountryOrRegion { get; set; } 

     public string PostalCode { get; set; } 

     public string State { get; set; } 

     public string Street { get; set; } 
    } 

    public partial class Otheraddress 
    { 
     public object City { get; set; } 

     public object CountryOrRegion { get; set; } 

     public object PostalCode { get; set; } 

     public object State { get; set; } 

     public object Street { get; set; } 
    } 

    public partial class Rootobject 
    { 
     public object AssistantName { get; set; } 

     public DateTime? Birthday { get; set; } 

     public Businessaddress BusinessAddress { get; set; } 

     public string[] BusinessPhones { get; set; } 

     public object[] Categories { get; set; } 

     public object[] Children { get; set; } 

     public object CompanyName { get; set; } 

     public string Department { get; set; } 

     public string DisplayName { get; set; } 

     public Emailaddress[] EmailAddresses { get; set; } 

     public string FileAs { get; set; } 

     public object Generation { get; set; } 

     public string GivenName { get; set; } 

     public Homeaddress HomeAddress { get; set; } 

     public object Initials { get; set; } 

     public string JobTitle { get; set; } 

     public object Manager { get; set; } 

     public object MiddleName { get; set; } 

     public object MobilePhone1 { get; set; } 

     public object NickName { get; set; } 

     public string OfficeLocation { get; set; } 

     public Otheraddress OtherAddress { get; set; } 

     public object PersonalNotes { get; set; } 

     public object Profession { get; set; } 

     public object SpouseName { get; set; } 

     public string Surname { get; set; } 

     public object Title { get; set; } 

     public object YomiCompanyName { get; set; } 

     public object YomiGivenName { get; set; } 

     public object YomiSurname { get; set; } 
    } 
} 

ответ

1

Вы должны инициализировать BusinessPhones свойство пустого массива в конструкторе RootObject класса следующим образом.

public partial class RootObject 
{ 
    public RootObject() 
    { 
     this.BusinessPhones = new string[0]; 
    } 

    // rest of the class... 
} 

И если это не представляется возможным, вы должны убедиться, что BusinessPgones инициализируется пустой массив, прежде чем сериализовать его в JSON строку.

var rootObject = new RootObject(); 
rootObject.BusinessPhones = new string[]; 
// set other properties of rootObject 
//Serialize rootObject to JSON 
// Call rest API. 

Это должно решить вашу проблему.

0

С ошибки null коллекция не допускается. Вы должны быть в состоянии использовать любую пустую коллекцию вместо:

"BusinessPhones": []