Google Ads API varsayılan yük biçimi olarak Protobuf'u kullandığından, kullanarak API ile çalışırken birkaç Protobuf kuralını ve türünü anlayabilirsiniz.
İsteğe bağlı alanlar
Google Ads API'deki birçok alan optional
olarak işaretlenmiştir. Bu şekilde şunları yapabilirsiniz:
alanın boş bir değere sahip olduğu durumlar ile sunucunun boş olduğu durumları birbirinden ayırt etme
alan için bir değer geri göndermedi. Bu alanlar normal bir şekilde davranır
Ancak, bunlar aynı zamanda alanı temizlemek ve geri bildirim almak için
alanın ayarlanıp ayarlanmadığını kontrol edin.
Örneğin, Campaign
nesnesinin Name
alanı isteğe bağlı olarak işaretlenmiş.
Dolayısıyla bu alanda çalışmak için aşağıdaki yöntemleri kullanabilirsiniz.
// 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;
Tekrarlanan türler
Alan dizisi, Google Ads API'de salt okunur olarak gösterilir
RepeatedField
.
Bir kampanyanın url_custom_parameters
alanı yinelenen bir alandır.
Bu nedenle .NET'te salt okunur bir RepeatedField<CustomParameter>
olarak gösterilir.
kullanabilirsiniz.
RepeatedField
,
IList<T>
kullanır.
RepeatedField
alanını doldurmanın iki yolu vardır.
Eski C# sürümü: AddRange yöntemini kullanarak değerleri ekleme
Aşağıda bir örnek verilmiştir.
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" }
});
Daha yeni C# sürümleri: Koleksiyon başlatıcı söz dizimini kullanma
// 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 }
};
Türlerden biri
Google Ads API'deki bazı alanlar OneOf
alanları olarak işaretlenmiştir. Diğer bir deyişle, bu alanlar
aynı anda yalnızca tek bir değer alabilir. Alanlardan biri:
C'deki birleşim türüne benzerdir.
.NET kitaplığı, her tür için bir özellik sağlayarak OneOf alanlarını uygular değeri ve bir öğeyi güncelleyen tüm özellikler paylaşılan sınıf alanını kullanır.
Örneğin, kampanyanın campaign_bidding_strategy
değeri OneOf olarak işaretlenmiş
girin. Bu sınıf, aşağıdaki gibi uygulandı (kod kısaltılması için basitleştirilmiştir):
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_; }
}
}
OneOf mülkler depolama alanını paylaştığından, bir atama önceki Bu da göze çarpmayan hatalara neden olur. Örneğin,
Campaign campaign = new Campaign()
{
ManualCpc = new ManualCpc()
{
EnhancedCpcEnabled = true
},
ManualCpm = new ManualCpm()
{
}
};
Bu durumda, campaign.ManualCpc
başlatıldıktan sonra şu anda null
campaign.ManualCpm
alanı, şunun için önceki başlatmanın üzerine yazar:
campaign.ManualCpc
Diğer biçimlere dönüştürme
Protobuf nesnelerini JSON biçimine ve tersine kolayca dönüştürebilirsiniz. Bu diğer sistemlerle arabuluculuk yapması gereken ve JSON veya XML gibi metin tabanlı biçimlerde veri gerektirir.
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);
Ayrıca, bir nesneyi baytlara ve geriye dönük olarak serileştirebilirsiniz. İkili program serileştirmesi JSON biçiminden daha verimli bellek ve depolama alanı sunar.
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);