Karena Google Ads API menggunakan proto3 sebagai format payload default, Anda harus memahami beberapa konvensi dan jenis protobuf saat menggunakan API.
Kolom opsional
Banyak kolom di Google Ads API ditandai sebagai optional
. Dengan demikian, Anda dapat membedakan kasus saat kolom memiliki nilai kosong, dan saat server tidak mengirimkan kembali nilai untuk kolom tersebut. Kolom ini berperilaku seperti kolom biasa, kecuali kolom ini juga menyediakan metode tambahan untuk menghapus kolom dan untuk memeriksa apakah kolom telah ditetapkan.
Misalnya, kolom Name
objek Campaign
ditandai sebagai opsional. Jadi, Anda dapat menggunakan metode berikut untuk menggunakan kolom ini.
// Get the name.
string name = campaign.Name;
// Set the name.
campaign.Name = name;
// Check if the campaign object has the name field set.
bool hasName = campaign.HasName();
// Clear the name field. Use this method to exclude Name field from
// being sent to the server in a subsequent API call.
campaign.ClearName();
// Set the campaign to empty string value. This value will be
// sent to the server if you use this object in a subsequent API call.
campaign.Name = "";
// This will throw a runtime error. Use ClearName() instead.
campaign.Name = null;
Kolom berulang
Array kolom ditampilkan di Google Ads API sebagai RepeatedField
hanya baca.
Contohnya adalah kolom url_custom_parameters
kampanye yang merupakan kolom berulang,
sehingga ditampilkan sebagai RepeatedField<CustomParameter>
hanya baca di .NET
client library. RepeatedField
mengimplementasikan antarmuka IList<T>
.
Ada dua cara untuk mengisi kolom RepeatedField
.
Metode AddRange
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
};
// Add values to UrlCustomParameters using AddRange method.
campaign.UrlCustomParameters.AddRange(new CustomParameter[]
{
new CustomParameter { Key = "season", Value = "christmas" },
new CustomParameter { Key = "promocode", Value = "NY123" }
});
```
Sintaksis penginisialisasi koleksi
// Option 1: Initialize the field directly.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
// Directly initialize the field.
UrlCustomParameters =
{
new CustomParameter { Key = "season", Value = "christmas" },
new CustomParameter { Key = "promocode", Value = "NY123" }
}
};
// Option 2: Initialize using an intermediate variable.
CustomParameter[] parameters = new CustomParameter[]
{
new CustomParameter { Key = "season", Value = "christmas" },
new CustomParameter { Key = "promocode", Value = "NY123" }
}
Campaign campaign1 = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
// Initialize from an existing array.
UrlCustomParameters = { parameters }
};
Kolom oneof
Beberapa kolom di Google Ads API ditandai sebagai kolom oneof
, yang berarti bahwa
kolom dapat menyimpan berbagai jenis, tetapi hanya satu nilai dalam satu waktu. Kolom oneof
mirip dengan jenis union dalam bahasa pemrograman C.
Library .NET menerapkan kolom oneof
dengan menyediakan satu properti untuk setiap jenis nilai yang dapat disimpan dalam kolom oneof
, dan semua properti memperbarui kolom class bersama.
Misalnya, campaign_bidding_strategy
kampanye ditandai sebagai kolom oneof
. Class ini diterapkan sebagai berikut (kode disederhanakan agar lebih ringkas):
public sealed partial class Campaign : pb::IMessage<Campaign>
{
object campaignBiddingStrategy_ = null;
CampaignBiddingStrategyOneofCase campaignBiddingStrategyCase_;
public ManualCpc ManualCpc
{
get
{
return campaignBiddingStrategyCase_ == CampaignBiddingStrategyOneofCase.ManualCpc ?
(ManualCpc) campaignBiddingStrategy_ : null;
}
set
{
campaignBiddingStrategy_ = value;
campaignBiddingStrategyCase_ = CampaignBiddingStrategyOneofCase.ManualCpc;
}
}
public ManualCpm ManualCpm
{
get
{
return campaignBiddingStrategyCase_ == CampaignBiddingStrategyOneofCase.ManualCpm ?
(ManualCpm) campaignBiddingStrategy_ : null;
}
set
{
campaignBiddingStrategy_ = value;
campaignBiddingStrategyCase_ = CampaignBiddingStrategyOneofCase.ManualCpm;
}
}
public CampaignBiddingStrategyOneofCase CampaignBiddingStrategyCase
{
get { return campaignBiddingStrategyCase_; }
}
}
Karena properti oneof
berbagi penyimpanan, satu tugas dapat menimpa tugas sebelumnya, sehingga menyebabkan bug yang tidak terlihat. Misalnya,
Campaign campaign = new Campaign()
{
ManualCpc = new ManualCpc()
{
EnhancedCpcEnabled = true
},
ManualCpm = new ManualCpm()
{
}
};
Dalam hal ini, campaign.ManualCpc
sekarang menjadi null
karena menginisialisasi kolom
campaign.ManualCpm
akan menimpa inisialisasi sebelumnya untuk
campaign.ManualCpc
.
Konversi ke format lain
Mengonversi ke format JSON
Anda dapat mengonversi objek protobuf ke format JSON dan sebaliknya. Hal ini berguna saat membangun sistem yang perlu berinteraksi dengan sistem lain yang memerlukan data dalam format berbasis teks seperti JSON atau XML.
GoogleAdsRow row = new GoogleAdsRow()
{
Campaign = new Campaign()
{
Id = 123,
Name = "Campaign 1",
ResourceName = ResourceNames.Campaign(1234567890, 123)
}
};
// Serialize to JSON and back.
string json = JsonFormatter.Default.Format(row);
row = GoogleAdsRow.Parser.ParseJson(json);
Mengonversi ke byte
Anda dapat melakukan serialisasi objek ke byte dan kembali. Serialisasi biner lebih hemat memori dan penyimpanan daripada format JSON.
GoogleAdsRow row = new GoogleAdsRow()
{
Campaign = new Campaign()
{
Id = 123,
Name = "Campaign 1",
ResourceName = ResourceNames.Campaign(1234567890, 123)
}
};
// Serialize to bytes and back.
byte[] bytes = row.ToByteArray();
row = GoogleAdsRow.Parser.ParseFrom(bytes);