Karena Google Ads API menggunakan Protobuf sebagai format payload default, penting untuk untuk memahami beberapa konvensi dan jenis Protobuf saat bekerja dengan API.
Kolom opsional
Banyak kolom di Google Ads API ditandai sebagai optional
. Hal ini memungkinkan Anda
membedakan antara kasus ketika kolom memiliki nilai kosong, versus server
tidak mengirim kembali nilai untuk {i>field<i} tersebut. Kolom ini berperilaku seperti
tapi juga menyediakan metode tambahan
untuk mengosongkan {i>field <i}dan untuk
periksa apakah {i>field<i} sudah ditetapkan.
Misalnya, kolom Name
dari objek Campaign
ditandai sebagai opsional.
Jadi, Anda dapat menggunakan metode berikut untuk menangani 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;
Jenis berulang
Array kolom direpresentasikan di Google Ads API sebagai hanya baca
RepeatedField
Contohnya adalah kolom url_custom_parameters
kampanye yang merupakan kolom berulang,
sehingga direpresentasikan sebagai RepeatedField<CustomParameter>
hanya baca di .NET
library klien.
RepeatedField
mengimplementasikan
IList<T>
dalam antarmuka berbasis web
yang sederhana.
Ada dua cara untuk mengisi kolom RepeatedField
.
Versi C# lama: Menambahkan nilai menggunakan metode AddRange
Contohnya diberikan di bawah ini.
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" }
});
Versi C# yang lebih baru: Menggunakan 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 }
};
Salah satu jenis
Beberapa kolom di Google Ads API ditandai sebagai kolom OneOf
, artinya kolom tersebut
dapat menampung jenis yang berbeda tetapi hanya
satu nilai pada waktu tertentu. Salah satu kolomnya adalah
mirip dengan {i>union type<i} di C.
Library .NET menerapkan kolom OneOf dengan menyediakan satu properti untuk setiap jenis yang dapat disimpan di kolom OneOf, dan semua properti kolom kelas bersama.
Misalnya, campaign_bidding_strategy
kampanye ditandai sebagai OneOf
kolom tersebut. Class ini diimplementasikan sebagai berikut (kode disederhanakan agar lebih singkat):
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 properti sebelumnya tugas, yang mengarah pada {i>bug<i} halus. Misalnya,
Campaign campaign = new Campaign()
{
ManualCpc = new ManualCpc()
{
EnhancedCpcEnabled = true
},
ManualCpm = new ManualCpm()
{
}
};
Dalam hal ini, campaign.ManualCpc
sekarang adalah null
sejak melakukan inisialisasi
Kolom campaign.ManualCpm
akan menimpa inisialisasi sebelumnya untuk
campaign.ManualCpc
.
Konversi ke format lain
Anda dapat dengan mudah mengonversi objek protobuf ke format JSON dan secara terbalik. Ini adalah berguna ketika 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);
Anda juga dapat melakukan serialisasi objek ke byte dan kembali. Serialisasi biner lebih untuk membuat memori dan penyimpanan lebih efisien 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);